C语言中unsigned int bValue = {0}是数组新初始化方式吗?编译报错求解
问题解答
核心结论
unsigned int bValue = {0}; 不是数组的新初始化方式,它只是单个unsigned int类型变量的合法初始化写法。
详细解释
变量本质:
这条声明里的bValue是一个单个unsigned int变量,而非数组。C标准允许用花括号{}来初始化标量类型(比如int、char这类单个值的类型),{0}在这里等价于直接赋值= 0,只是写法不同,但变量本身依然是单个值,不是数组或指针。编译错误原因:
代码后续使用bValue[i]试图通过下标访问元素,但bValue是单个变量,既不是数组(数组名可隐式转换为指针)也不是指针类型,所以编译器会抛出“subscripted value is neither array nor pointer”的错误。合法的数组声明方式:
若想让bValue成为数组,需要在声明时指定数组大小,比如:// 声明一个包含4个元素的unsigned int数组,并初始化为0 unsigned int bValue[4] = {0};此时
sizeof(bValue)/sizeof(unsigned int)会得到数组的元素个数4,后续的下标访问bValue[i]才是合法的。
内容的提问来源于stack exchange,提问作者riverfan
相关产品推荐
相关产品推荐

