下面两个c语句之间的差异

下面两个c语句之间的差异,c,static,initialization,extern,C,Static,Initialization,Extern,有人能告诉我以下两个c语句在初始化、表的范围和任何其他方面的区别吗 注意:这两个变量都是全局变量 unsigned int *table[100] = {NULL}; static unsigned int *table[100] = {NULL}; table是两个声明中类型为unsingned int的指针数组 区别在于static数组的可见性仅限于声明此数组的文件 这个链接会有帮助 相似性: 两者都是100个整数指针的数组 即使您没有初始化,这两个都将初始化为NULL 它们被宣布为全球

有人能告诉我以下两个c语句在初始化、表的范围和任何其他方面的区别吗

注意:这两个变量都是全局变量

unsigned int *table[100] = {NULL};

static unsigned int *table[100] = {NULL};
  • table
    是两个声明中类型为
    unsingned int
    的指针数组
  • 区别在于
    static
    数组的可见性仅限于声明此数组的文件
  • 这个链接会有帮助

    相似性:

  • 两者都是100个整数指针的数组
  • 即使您没有初始化,这两个都将初始化为NULL 它们被宣布为全球性的
  • 两者都将存储在数据段中
  • 区别:

  • 作用域:第一个将具有全局作用域,将被访问 从你的程序中的任何地方。第二个将有文件范围的方法 您无法从其他文件访问这些指针
  • 请注意,如果在同一个文件中声明了这两个属性,那么静态声明将获得最高的优先级。i、 e.将任何值赋给表指针将得到静态初始化。

    unsigned int *table[100] = {NULL};
    
    是指向
    非单整数
    的指针数组,并将整个数组元素初始化为
    NULL

    static unsigned int *table[100] = {NULL};//declared as static means  initialized only once
    

    是指向
    静态非单精度int
    的指针数组,并将整个数组元素初始化为
    NULL

    请注意
    …={NULL}
    仅将数组的第一个元素初始化为
    NULL
    *所有其他元素都被初始化为
    0
    ,根据使用的C实现,这两个元素不一定都是相同的。@P.J.Meisch:我觉得是标题的副本,但不是内容的副本。参考我之前的评论:请参阅我在OP:@alk sir上的评论,但其余元素隐式为空。我是对还是错?不一定。请查看我刚刚添加的链接,作为对OP的(另一)评论。请查看我对OP的评论:
    static unsigned int *table[100] = {NULL};//declared as static means  initialized only once