以下两个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语句之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

选择连接SQL语句中的内连接和where之间的区别[重复]

两个Sql查询之间的区别[重复]

指针和数组之间的区别[重复]

C#中参数/参数之间的区别[重复]

C ++取消引用和使用点运算符与使用箭头运算符之间有区别[重复]

C++指针和&Pointer之间的区别[重复]