首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于const有关问题

2012-04-25 
关于const问题为什么const int b5char m[b]可以但是int a5const int ba(这里初始化没报错)char m[b

关于const问题
为什么const int b=5;char m[b];可以
但是int a=5;const int b=a;(这里初始化没报错)char m[b]就不行了


[解决办法]
const int b=a;
这只是说b代表的那篇内存b自己不能修改而已,而那篇内存的初值在编译时还不可知,所以不能初始化
[解决办法]
前一种写法编译器可以确定b中拥有一个常数。而后一种写法虽然也给了它一个常数,可却是通过变量赋给它的,结果编译器就弄不清b里面究竟会不会有一个常数了。
[解决办法]

探讨
为什么const int b=5;char m[b];可以
但是int a=5;const int b=a;(这里初始化没报错)char m[b]就不行了

[解决办法]
仅仅是一个优化而已。
如果你加上 const volatile int b=5; 你就知道还能不能编译了。(不要用支持c99的编译器)
[解决办法]
探讨
前一种写法编译器可以确定b中拥有一个常数。而后一种写法虽然也给了它一个常数,可却是通过变量赋给它的,结果编译器就弄不清b里面究竟会不会有一个常数了。

[解决办法]
就一个优化的缘故

const volatile int a=5; int b[a];你看看还能否编译成功 (c99编译器除外)
[解决办法]
探讨

引用:
为什么const int b=5;char m[b];可以
但是int a=5;const int b=a;(这里初始化没报错)char m[b]就不行了


因为优化的缘故。char m[b]这里在编译的时候直接用5替代了。 而 const int b=a;这样是没办法优化的。

[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

热点排行