为什么数字数组不以'\ 0'或空字符结尾?

Vij*_*han 24 c arrays

为什么数字数组不以空字符结尾?

例如,

char name[] = {'V', 'I', 'J', 'A', 'Y', '\0'};
Run Code Online (Sandbox Code Playgroud)

但是在数字数组的情况下,最后没有空字符的迹象......

例如,

int marks[] = {20, 22, 23};
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么?

use*_*342 23

提出的问题包含一个隐藏的假设,即所有char数组都以空字符结尾.事实并非总是如此:char必须以空字符结尾的数组是那些用作字符串的数组,实际上需要终止.

在您的示例中,char数组仅以空字符结尾,因为您这样做了.编译器将为您插入空字符的单个位置是从字符串文字声明char数组时,例如:

char name[] = "VIJAY";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将自动插入空字符,以使结果数组成为有效的C字符串.对于其他数字类型的数组不存在这样的要求,也不能从字符串文字初始化它们.换句话说,将零附加到数值数组将没有任何意义,因为没有代码使用零来查找数组结束,因为零是完全有效的数字.

有时使用NULL指针终止指针数组,这是有道理的,因为NULL指针不能与有效指针混淆.argv接收到的字符串数组就是这种数组的main()一个例子.

  • @Drop有时看似准确的问题是无法回答的,例如"你父母知道你是秃头吗?" (如果你不是秃头).OP问题的措辞包含一个隐藏的假设,即char数组以空字符结尾,这不是(必然).答案详细解释了这一点,如果您认为可以更好地回答这个问题,请随时提交自己的答案. (10认同)

Yu *_*Hao 5

数组可以以任何有效的数组元素类型值结尾。但是只有\0终止char数组称为字符串。

例如

char name[]={'V','I','J','A','Y'};
Run Code Online (Sandbox Code Playgroud)

有效,但不是字符串,限制是您不能在需要类似字符串的函数中使用它strlen


从下面OP的评论澄清,由C标准,任何字符文字喜欢'a''1'等,包括'\0'的类型int。您可以将a '\0'放在int数组的末尾,如下所示:

int arr[] = {20, 22, 23, '\0'};
Run Code Online (Sandbox Code Playgroud)

但是人们通常不这样做,因为它是常规的,'\0'仅用于终止字符串。上面的代码相当于

int arr[] = {20, 22, 23, 0};
Run Code Online (Sandbox Code Playgroud)


Joh*_*ode 5

用0终止子结束,但是一个是不一样的东西作为一个阵列.我们使用数组来存储字符串,但我们也使用数组来存储字符串的东西.这就是为什么数组通常不会自动附加0.

此外,在任何通用数组中int,0可以是有效(非哨兵)值.