Watts_an
2015-11-07 00:58
采纳率: 100%
浏览 4.7k
已采纳

求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那句就没有问题。我想知道这是为什么?网上稍微搜了一下,还是不太明白 。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • Watts_an 2015-11-07 07:07
    已采纳

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

    点赞 评论
  • 好儿郎-志在四方 2015-11-07 01:10

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

    点赞 评论
  • 好儿郎-志在四方 2015-11-07 01:12

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

    点赞 评论
  • 好儿郎-志在四方 2015-11-07 01:22

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

    点赞 评论
  • const in c doesn't mean constant. It means "read only".

    点赞 评论
  • 好儿郎-志在四方 2015-11-07 01:39
    点赞 评论
  • wunaidepao 2015-11-07 01:55

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

    点赞 评论
  • Aiome 2015-11-07 05:07

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

    点赞 评论
  • 跃I.0 2019-08-15 16:47

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

    点赞 评论

相关推荐 更多相似问题