arrays - 这些数组声明之间的区别?
问题描述
这些数组声明有什么区别?
- 字符数组[常量静态 4];
- 常量静态字符数组[4];
解决方案
第一个声明 ,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];
表示array
4 的数组const
char
,具有静态存储持续时间,这意味着在程序的整个执行过程中将为它们保留内存。如果声明出现在函数之外,static
也意味着标识符array
将具有内部链接。(如果它出现在函数内部,则标识符没有链接,不管static
.)
因此,static
这两个声明之间的含义完全不同。首先,它对数组中的元素数量提出了要求。其次,它影响存储持续时间(当内存为数组保留时)和可能的链接(名称如何连接到其他相同名称的出现)。
两个声明中的const
含义相似,但适用于不同的部分。首先,它适用于声明的指针。第二,它适用于数组的元素。
推荐阅读
- domain-driven-design - DDD:在单个事务中创建具有共享生命周期的多个聚合
- python - 从一个列表的列表中平均结果,其中每个第 n 个列表都是一个重复
- r - R/Shiny,响应式值:如何正确创建异构数据元素的响应式列表?
- powerbi - Power BI 在数据源之间切换
- c++ - 将 std::find 与 std::string 数组一起使用时出现问题
- c# - 带有多个参数的 Select 中的 EF Core 表达式
- c# - 在 .Net Core 3.1 Web Api 项目中使用 System.Text.Json 将 XmlDocument 序列化为 Json
- python - Pickle 模块,它破坏了“Conceptual Programming with Python”一书中的代码
- typescript - 打字稿:为什么传递对象和分配给该对象的变量作为参数之间存在差异?
- kotlin - CancellationException 什么时候会发生?