以下能对一维数组a 进行正确初始化的语句是【C 】.为什么?

说实话,这题选D确实有点让人摸不着头脑,但考的都是细节。
当时问这个问题的时候我差点选C,但是翻了书之后发现了一个坑。

看选项D,它说a[0]=1 0,其他9 默认为0。
这实际上是C++中非常典型的行为 - 如果在初始化期间只给出一个值,编译器将自动用0填充其余元素。
但关键点是问题是问“初始化”,而不是“赋值”。
严格来说,对于a={1 0}这行代码,编译器会根据元素的个数分配空间,然后将a[0]的值赋值为1 0,剩下的9 会自动重置为零。
但出现了关于“初始化”的问题。
按照标准定义,初始化特指定义时给所有元素赋值的过程,所以D表达式确实不严格。

有趣的是,选项 C 指出“可以在不指定的情况下初始化数组元素的数量”。
这实际上是由C9 9 标准支持的。
例如,int a[1 0]={0,1 ,2 };编译器会自动将剩余元素填充为0。
但是问题没有提到C9 9 ,所以根据旧标准,选项C表达式不够精确。

说到这里,我想到了一个经典的面试问题。
面试官问我:int a[3 ] = {1 };目前a[0]是1 a[1 ]和a[2 ]是什么?我当时没有多想,以为会报错,但是他们说默认值是0。
显然这个细节很重要。

我记得C9 9 标准明确支持块数据,但我不知道它是C1 1 还是C1 7 建议您熟悉最新标准。
无论如何,对于这类问题,最安全的方法是编写一个完整的初始化列表,如 int a[1 0] = {0};这样就不会有歧义了。

C语言题, 以下能对一维数组a进行正确初始化的语句是

说实话,选择A是唯一可靠的选择。
B 未初始化的事实是一个大问题。
我们去年跑的一个项目在这里崩溃了,直接把系统搞崩溃了。
C没有数组长度,这更可笑。
你想放多久都可以,但这只是一颗定时炸弹。

一开始我以为D还可以,后来我错了。
如果根本无法初始化我该如何使用它?等等,还有别的事。
如果数组是动态分配的,D 的编写方式甚至可能无法可靠地初始化前 6 项。

我们建议您仔细查看每个选项的初始化详细信息。
我没有像上次那样为了节省时间直接选择B,而是最终重做了一周。

以下C语言选择题选什么,并作简要分析。

1 . 正确初始化:B、C、D。
一个错误,一个语法错误。

2 表达式值为3 :A。
p+=2 指向元素 3 ,(p++) 返回 3
3 正确且合理的说法:B. A、C、D都不合理,只有B可行。

4 引用数组 s:B 中的元素。
(s+i) 是正确的。