求C语言高手解惑,一个关于const变量定义数组大小问题

我在函数的外部定义了一个BlockSize,然后又定义了一个结构(两者都是在函数外部)。编译的时候,出现一个error。提示说:variably modified 'array' at file scope

const int BlockSize = 20;//define BlockSize 20
typedef struct _node {
int array[BlockSize];
struct _node* next;
}Node;
但是换成define那句就没有问题。我想知道这是为什么?网上稍微搜了一下,还是不太明白 。

看来还是不做伸手党的要好。网上找来一篇文章似乎比较靠谱。http://33024.blog.163.com/blog/static/123070422201172835436137/

目测这样const int BlockSize = 20;
typedef struct _node {
int array[BlockSize];
struct _node* next;
}Node;
这样使用是没有问题的,我在DEVC++里面验证了,可能是编译器解释不同而已,程序没有错误
图片说明

另外:
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
两者是有一点区别的

图片说明
换成C了,还是能通过编译的,可能是编译器IDE不一样,对语言的解释有细微的差别,但是不碍大雅的,

const in c doesn't mean constant. It means "read only".

http://www.vcerror.com/?p=1936;
http://blog.csdn.net/wusuopubupt/article/details/18408227;
网上看到了这两个同样的问题,

老问题了,cpp是支持的常量表达式比C语言多。你看看标准c就知道了。

这个问题是你对const还是了解的不够彻底,const不是事实上的常量,他是“只读变量”,而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由**编译器**限定**不允许被修改**。const就是用来限定一个变量**不允许被改变的修饰符**,而 C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的,“常量”不等于“不可变的变量”。所以博主用const定义的“常量”BlockSize不能作为限定数组长度的常量

编译器问题吧,我今天看见很多地方说常量不能作数组下标 我在我编译器上试了都可以,不同编译器实现不一样吧