const变量不能初始化数组长度
来源:互联网 发布:免费即时聊天软件 编辑:程序博客网 时间:2024/05/16 15:48
为什么下面的例子在使用一个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宏,这两个都可以用来定义常量。
二楼的回答言简意赅,可惜我当时没能理解。
原文链接地址:http://baike.baidu.com/view/1065598.html?fromTaglist
--------------------------------------------------------------------------------------------------------------------------------------
- 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 成员变量初始化例子
- 特殊字的读音
- ecshop后台批量上传图片方法
- Mybatis 学习笔记 1(非原创 自己整理)
- Android camera系统开发之IPC (三)
- android小记之FTP文件上传
- const变量不能初始化数组长度
- SQL server表数据误删除后的恢复方法
- Android camera系统开发之IPC (四)
- 土坷垃的情怀
- Android camera系统开发之IPC (五)
- Ruby中的字符串与符号
- 列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息
- Linux kernel起来后android 之init详解
- CMake