【问题标题】:Difference between below two c statements [duplicate]以下两个c语句之间的区别[重复]
【发布时间】: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:我觉得是标题重复,但内容不重复。
  • 参考我之前的评论:stackoverflow.com/q/9894013/694576

标签: c static initialization extern


【解决方案1】:
  1. table 是两个声明中 unsingned int 类型的指针数组。
  2. 不同之处在于 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 的评论:stackoverflow.com/questions/39653161/…
    • @alk 先生,但其余元素隐式为 NULL。我是对还是错?
    • 不一定。请查看我刚刚作为(另一个)评论添加到 OP 的链接。
    【解决方案3】:

    相似度:

    1. 两者都是 100 个整数指针的数组。
    2. 即使不初始化,两者都会被初始化为 NULL 为 它们被声明为全局的。
    3. 两者都将存储到数据部分。

    区别:

    1. Scope:第一个将具有全局范围,将被访问 从你的程序的任何地方。第二个将具有文件范围手段 您无法从其他文件访问这些指针。

    请注意,如果您在同一个文件中声明两者,则静态声明将获得最高优先级。即为表指针分配任何值都会得到静态初始化。

    【讨论】:

    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 2013-02-04
    • 2020-06-12
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多