Sil*_*las 7 c arrays static pointers
简单但棘手的问题:
void f() {
static int a[3] = {1, 2, 3};
...
Run Code Online (Sandbox Code Playgroud)
什么是静态?指向数组或整个数组的指针?
任何人都能指出我在C标准中的定义吗?
谢谢!
根据ISO C99标准(第6.2.1节"标识符范围"):
3如果对象或函数的文件范围标识符的声明包含存储类说明符static,则标识符具有内部链接.22)
在您的示例中,它a是变为静态的标识符(即,不导出目标文件中的符号).
编辑:
对于非文件范围的静态声明(第6.2.4节"对象的存储持续时间")
3使用外部或内部链接声明标识符的对象,或者使用存储类说明符static声明的对象具有静态存储持续时间.它的生命周期是程序的整个执行,它的存储值只在程序启动之前初始化一次.
我认为这意味着在这种情况下数组本身变为静态,这是有道理的,因为标识符将具有无效内容.