【发布时间】:2010-09-26 16:48:38
【问题描述】:
如果numbers 不是地址常量,那么在下面的声明中究竟是什么?
int main() {
int numbers[3] = {1,2,3};
return 0;
}
反汇编程序显示 1、2 和 3 被动态放置在本地堆栈空间中,而不是整个数组被视为常量。因此,{1,2,3} 没有静态存储持续时间,因此根据 C99 规范,numbers 不是地址常量。
C99,第 6.6.9 节:“地址常量是空指针、指向指定静态存储持续时间对象的左值的指针或指向函数指示符的指针……”
但是,在声明后添加行 numbers++ 会导致 GCC 4.1.2 中出现以下编译错误:
error: invalid lvalue in increment
所以它是常数,但不是地址常数。有人知道C99(或类似)中这种常量的正式名称吗?
【问题讨论】: