const变量不能初始化数组长度
来源:互联网 发布:九大算法 编辑:程序博客网 时间:2024/06/06 02:54
为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?
const int n = 5;
int a[n];
答案与分析:
1) 这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n 被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的。
2) 注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。
3) 那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
const int n = 5;
int a[n];
答案与分析:
1) 这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n 被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的。
2) 注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。
3) 那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
0 0
- const变量不能初始化数组长度
- const变量不能初始化数组长度
- C++ 中用变量长度初始化三维数组
- error:关于const变量来初始化数组
- const 成员变量初始化规则
- const 成员变量初始化规则
- const 成员变量初始化规则
- 程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)
- C语言返璞归真之修改const常量和使用变量定义数组长度
- 初始化:变量和数组
- 初始化const, static, const static, static const成员变量
- 初始化const, static, const static, static const成员变量
- 为什么在非静态const类型以及引用型成员变量必须在初始化列表里面初始化,不能在{}里面初始化?
- static const 型成员变量的初始化
- const型类成员变量的初始化
- c++类中const static变量初始化
- 类中的const变量的初始化
- const map 成员变量初始化例子
- NSString VS NSDate (转换详解)
- java中的流
- Ubuntu中安装JDK1.6
- 颠倒一个字符串
- php导出execl数据
- const变量不能初始化数组长度
- 《SQL注入攻击与防御第2版》笔记
- MATLAB的size(),length(),ndims()函数
- asp中rs.BookMark的使用介绍
- Nginx windows下搭建过程:nginx无法启动
- Linux OpenCV读取视频失败,cvCreateFileCapture失败的解决
- C++习题 对象转换
- jmp指令
- C/C++开发语言系列之1--const用法总结1