C中整数指针数组的静态初始化出错

Mon*_*Das 0 c arrays pointers static-initialization turbo-c

我在初始化整数指针数组时遇到错误.虽然问题看起来很简单,但我无法理解这有什么问题.我是C编程的新手.

在此输入图像描述

Jon*_*ler 5

C90标准说(§6.5.7):

具有静态存储持续时间的对象的初始值设定项中的所有表达式或具有聚合或联合类型的对象的初始化列表中的所有表达式都应为常量表达式.

在上下文中,p'具有聚合类型',并且数组元素的地址a不是常量,因此C90表示不允许初始化.这就是您的编译器拒绝该代码的原因.

C99放松了这种限制.相应的段落(§6.7.84)说:

具有静态存储持续时间的对象的初始化程序中的所有表达式应为常量表达式或字符串文字.

帮自己一个忙,并获得一个可以追溯到当前千年的编译器 - 如果可能的话,应该是一个实现C11的编译器.

  • 啊,现在我明白了.这就是标准实际上说的:"_address constant_是"......"......一个指向左值的指针,指定**静态存储持续时间**的对象".这篇文章是从C90到C11.它非常有意义,因为问题中的变量是在堆栈上分配的.但由于C99放宽了初始化程序的要求,因此无需使用常量表达式初始化自动存储变量.所以@ JonathanLeffler的答案是正确的,为什么这些初始值不是常量表达式并不是那么明显. (2认同)