首页 > 解决方案 > 这些数组声明之间的区别?

问题描述

这些数组声明有什么区别?

标签: arraysc

解决方案


第一个声明 ,char array[const static 4];不是 C 中的有效声明。根据 C 6.7.6.2 1,内部的限定符[并且]只能出现在函数参数声明中。

如果这显示为函数参数声明,如 中void foo(char array[const static 4]),则表示:

  • array是一个 4 的数组char,但它会被调整为指向char.
  • 该指针将被const限定,这意味着它不应该被修改。
  • 调用函数时,指针必须指向至少 4 个char对象中的第一个。

请注意,const表示指针是const合格的,而不是char它指向的对象是const合格的。

第二个声明 ,const static char array[4];表示array4 的数组const char,具有静态存储持续时间,这意味着在程序的整个执行过程中将为它们保留内存。如果声明出现在函数之外,static也意味着标识符array将具有内部链接。(如果它出现在函数内部,则标识符没有链接,不管static.)

因此,static这两个声明之间的含义完全不同。首先,它对数组中的元素数量提出了要求。其次,它影响存储持续时间(当内存为数组保留时)和可能的链接(名称如何连接到其他相同名称的出现)。

两个声明中的const含义相似,但适用于不同的部分。首先,它适用于声明的指针。第二,它适用于数组的元素。


推荐阅读