C语言使用const定义数组时的错误原因

来源:互联网 发布:linux nano 怎样保存 编辑:程序博客网 时间:2024/05/22 00:26

      在c语言编程中我们这样定义数组时编译器回报一个错误

const int n=5;int ar[n];

     这确实是一个很棘手的问题,它会迫使我们用动态开辟空间的方法来定义数组,但是我们使用动态开辟的方法比较复杂,容易出现错误。所以我们需要解决这个问题。为什么会出现上面原因呢?(在c++中是可以的)

主要原因是:

1.这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如数字5, 字符串“abc”等,肯定是只读的,因为程序中根本没有地方存放它的值,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不 过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符。上述代码中变量n被修饰为 只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。

2.在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。那么在c语言中我们如果想定义一个常量该怎么定义呢?在C语言中我们定义常量的方法可以通过#define宏定义或者enum,这两个是C语言中常用的定义常量的方法。这样上述问题就可以解决了。

1 0