关于CONST的数组有关问题

关于CONST的数组问题
const int a[] = {1, 2, 3, 4};
float f[a[2]]; //illegal

VS2010中错误提示表达式必须含有常量值

有点疑问,我这里是定义的常量数组,即定义了a[]数组,但是定义f[]时,
他的大小是a[2]=3,我定义了数组大小哦,咋这样报错呢!
而且f[]的大小不会变得哦

------解决方案--------------------
当const修饰数组的时候会为数据分配内存的,在编译阶段无法知道其值。在你直接用它的元素做其他组的下标时,编译的时候编译器无法知道其表示的值。
------解决方案--------------------
探讨
const int a[] = {1, 2, 3, 4};
float f[a[2]]; //illegal

VS2010中错误提示表达式必须含有常量值

有点疑问,我这里是定义的常量数组,即定义了a[]数组,但是定义f[]时,
他的大小是a[2]=3,我定义了数组大小哦,咋这样报错呢!
而且f[]的大小不会变得哦

------解决方案--------------------
探讨

引用:

当const修饰数组的时候会为数据分配内存的,在编译阶段无法知道其值。在你直接用它的元素做其他组的下标时,编译的时候编译器无法知道其表示的值。

应该是这样的了

------解决方案--------------------
探讨
引用:

引用:

当const修饰数组的时候会为数据分配内存的,在编译阶段无法知道其值。在你直接用它的元素做其他组的下标时,编译的时候编译器无法知道其表示的值。

应该是这样的了

这个答案还不能说“是这样了”,a[2]不是编译期是说对了,但是为什么不是编译期就没说到点子上。原因是数组a运行期才构造出来,编译期还不存在a[2]。