int是否会在元素数组的末尾添加哨兵值
int grades[5] = {78, 76, 75, 71, 88};
Run Code Online (Sandbox Code Playgroud)
如果上述答案是“是”,那么即使最后两个元素已默认设置为 0(例如下面的代码),哨兵值是否始终会被添加?
int grades[5] = {78, 76, 75, 0,};
Run Code Online (Sandbox Code Playgroud)
编译器唯一一次添加“哨兵”零元素是在使用字符串文字 \xe2\x80\xa6 初始化字符数组时,并且只有在数组中有足够空间的情况下。
\n例如,以下行将初始化一个包含四个字符的数组,并将该\'\\0\'字符添加为最后一个元素(因为数组的大小由指定的初始值设定项列表确定:
char str[] = "abc"; // 4 chars, including nul terminator\nRun Code Online (Sandbox Code Playgroud)\n但是,如果显式给出大小,则nul仅当数组足够大时才会添加最后一个字符:
char s1[4] = "abc"; // s1 will be a nul-terminated string\nchar s2[3] = "abc"; // s2 is an array of 3 chars WITHOUT a nul-terminator\nRun Code Online (Sandbox Code Playgroud)\n对于所有其他数组类型,如果初始值设定项列表中指定的元素数量小于声明的数组大小,则初始值设定项列表最后一个元素之外的所有元素都将初始化为零:
\nint arr[5] = {0, 1, 2}; // arr[3] and arr[4] will be initialized to zero\nRun Code Online (Sandbox Code Playgroud)\nC语言没有真正的“哨兵”的概念来标记数组的结束;nul然而,当使用字符数组(又名 C 字符串)时,实践(或规则)是用零 ( ) 字符 \xe2\x80\x93标记字符串的结尾,并且所有采用字符串参数的标准库函数都期望该规则被遵循(并依赖它)。
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |