提问人:unalignedmemoryaccess 提问时间:10/21/2023 最后编辑:Vlad from Moscowunalignedmemoryaccess 更新时间:10/21/2023 访问量:57
在 C 中初始化局部数组变量 [duplicate]
Initializing local array variable in C [duplicate]
问:
是否保证以下数组中的第一个元素将设置为 ,而所有其他元素将设置为 ,或者它是编译器定义的行为?1
0
#include <stdint.h>
int main () {
uint16_t arr[10] = {1};
}
答:
2赞
Vlad from Moscow
10/21/2023
#1
从 C 标准(6.7.9 初始化)
19 初始化应按初始值设定项列表顺序进行,每个 为特定子对象提供的初始值设定项覆盖任何 先前列出的同一子对象的初始值设定项;154) 全部 未显式初始化的子对象应初始化 隐式相同,与具有静态存储持续时间的对象相同。
和
10 如果具有自动存储持续时间的对象未初始化 明确地说,它的值是不确定的。如果具有静态的对象 或者线程存储持续时间未显式初始化,则:
— 如果它有指针类型,则初始化为空指针;
— 如果它有算术类型,则初始化为 (正或 无符号)零;
— 如果它是一个聚合,则每个成员都会被初始化(递归) 根据这些规则,任何填充都初始化为零位;
— 如果是联合,则初始化第一个命名成员 (递归)根据这些规则,并且任何填充都会被初始化 到零位;
因此,由于数组的元素类型是算术类型,因此数组的所有元素,除了具有显式初始值设定项的第一个元素外,都将初始化为零。
需要注意的是,按照C标准,不带参数的函数主函数应声明为:
int main( void )
评论