以下两个c语句之间的区别[重复]
Posted
技术标签:
【中文标题】以下两个c语句之间的区别[重复]【英文标题】:Difference between below two c statements [duplicate] 【发布时间】:2017-01-31 20:45:29 【问题描述】:谁能告诉我以下两个 c 语句在初始化、table
的范围和其他方面的区别。
注意:两者都是全局变量。
unsigned int *table[100] = NULL;
static unsigned int *table[100] = NULL;
【问题讨论】:
请注意... = NULL
仅将数组的第一个元素初始化为NULL
。 *所有其他元素都初始化为0
,根据使用的C实现,两者不一定需要相同。
@P.J.Meisch:我觉得是标题重复,但内容不重复。
参考我之前的评论:***.com/q/9894013/694576
【参考方案1】:
table
是两个声明中 unsingned int
类型的指针数组。
不同之处在于 static
数组的可见性仅限于声明此数组的文件。
链接会有所帮助
What does "static" mean?
【讨论】:
【参考方案2】:unsigned int *table[100] = NULL;
table
是一个指向unsingned int
的指针数组,并将整个数组元素初始化为NULL
。
static unsigned int *table[100] = NULL;//declared as static means initialized only once
table
是一个指向static unsingned int
的指针数组,并将整个数组元素初始化为NULL
。
【讨论】:
请看我对 OP 的评论:***.com/questions/39653161/… @alk 先生,但其余元素隐式为 NULL。我是对还是错? 不一定。请查看我刚刚作为(另一个)评论添加到 OP 的链接。【参考方案3】:相似度:
-
两者都是 100 个整数指针的数组。
即使不初始化,两者都会被初始化为 NULL 为
它们被声明为全局的。
两者都将存储到数据部分。
区别:
-
Scope:第一个将具有全局范围,将被访问
从你的程序的任何地方。第二个将具有文件范围手段
您无法从其他文件访问这些指针。
请注意,如果您在同一个文件中声明两者,则静态声明将获得最高优先级。即为表指针分配任何值都会得到静态初始化。
【讨论】:
请看我对 OP 的评论:***.com/questions/39653161/…以上是关于以下两个c语句之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章