`

对const操作来分配一个数组空间错误

阅读更多
#include       <stdio.h>  

int       main(void)  
{  
                const       int       i       =       2;  
                const       int       a[i]       =       {1,       2};                                           //为什么这里可以编译通过?  
                const       int       b[a[i-1]]       =       {1,       2};                       //为什么这里编译无法通过?  

                return       0;  
}  


C++编译器多数是不会为第一句中的i分配空间的,而是将其放入符号表中,是个编译时期的常量,这样就保证了编译器在扫描第二句时能通过。而第二句是 const用于集合的情况,但是必须保证编译器不会复杂到把一个集合保存到它的符号表中,所以必须分配内存。在这种情况下,const就意味着“不能改变的一块存储空间”,然而不能在编译期间使用它的值,因为编译器在编译期间不需要知道存储的内容。正因为如此,使得第三句不能编译通过。
1
0
分享到:
评论

相关推荐

    你必须知道的495个C语言问题

    4.2 我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题呢?char*p;*p=malloc(10); 4.3 *p++自增p还是p所指向的变量? 指针操作 4.4 我用指针操作int数组的时候遇到了麻烦。 4.5 我有一个...

    VBScript 语言参考

    ExecuteGlobal 语句 执行一个或多个在全局脚本名字空间中所指定的语句。 Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。 Exp 函数 返回 e (自然对数的底)的多少次方。 自乘运算符 (^) 指数...

    《你必须知道的495个C语言问题》

    4.2 我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题呢?char *p; *p =malloc(10); 45  4.3 *p++自增p还是p所指向的变量? 46 指针操作 46 4.4 我用指针操作int数组的时候遇到了麻烦。 ...

    VBScript 语言参考中文手册CHM

    ExecuteGlobal 语句 执行一个或多个在全局脚本名字空间中所指定的语句。 Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。 Exp 函数 返回 e (自然对数的底)的多少次方。 自乘运算符 (^) 指数...

    VBSCRIP5 -ASP用法详解

    ExecuteGlobal 语句 执行一个或多个在全局脚本名字空间中所指定的语句。 Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。 Exp 函数 返回 e (自然对数的底)的多少次方。 自乘运算符 (^) 指数...

    你必须知道的495个C语言问题.pdf

    4.2 我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题呢?char *p; *p =malloc(10); 4.3 *p++自增p还是p所指向的变量? 指针操作 4.4 我用指针操作int数组的时候遇到了麻烦。 4.5 我有一个char *...

    VBSCRIPT中文手册

    For Each...Next 语句 对于数组或集合中的每一个元素,重复一组语句。 FormatCurrency 函数 返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。 FormatDateTime 函数 返回格式化为日期或时间的...

    vb Script参考文档

    For Each...Next 语句 对于数组或集合中的每一个元素,重复一组语句。 FormatCurrency 函数 返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。 FormatDateTime 函数 返回格式化为日期或时间的...

    经典C/C++面试题目大汇总(全附答案).doc

    这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。 (2)使用引用传递函数的参数,在内存中并没有...

    C语言FAQ 常见问题列表

    o 5.1 我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么问题? char *p; *p = malloc(10); o 5.2 *p++ 自增 p 还是 p 所指向的变量? o 5.3 我有一个 char * 型指针正巧指向一些 int 型变量, 我想...

    在一小时内学会 C#(txt版本)

    默认情况下存在一个全局命名空间,所以在命名空间外定义的类直接进到此全局命名空间中,因而你可以不用定界符访问此类。 你同样可以定义嵌套命名空间。 Using #include 指示符被后跟命名空间名的 using 关键字代替...

    语言程序设计课后习题答案

    面向对象的方法将数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体--对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口,与外界...

    C++第一次大作业

    你的Set应该使用一个数组来存储成员并且数组应该使用new在堆上分配. 当set被创建时,它有一个指定的尺寸(指数组). 如果它满了, 必须从堆中开辟更多的内存. 这个将会在某一次Add()函数的期间. 如果set中有太多空的...

    c++ 面试题 总结

    段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一...

    C++ Primer第四版【中文高清扫描版】.pdf

    1.2.2 一个使用IO库的程序 5 1.3 关于注释 8 1.4 控制结构 10 1.4.1 while语句 10 1.4.2 for语句 12 1.4.3 if语句 14 1.4.4 读入未知数目的输入 15 1.5 类的简介 17 1.5.1 Sales_item类 17 1.5.2 初窥成员函数 19 ...

Global site tag (gtag.js) - Google Analytics