gpt4 book ai didi

C 数组和空字节

转载 作者:行者123 更新时间:2023-11-30 20:00:53 24 4
gpt4 key购买 nike

我有一个问题需要更好地理解数组和空字节在 C 中的工作原理。

假设我有一个包含 13 个单元格的 int 数组。假设我希望单元格编号:1、2、3 和 10 具有一个值。其他保留为默认值,自动获取 nullchar\0 作为值?

我对\0的理解是,空字节总是在数组的末尾,它的作用是告诉程序数组在哪里结束。但好像是错误的

我写了一个简单的程序来验证这一点,看起来是这样的:

int nums[13] = {1,2,3};
nums[10] = 69;
int i;
for(i=0;i<13;i++) {
if(nums[i]=='\0') {
printf("null char found! in position: %d\n",i);
}
else {
printf("element: %d found in position: %d of int array\n",nums[i],i);
}
}

return 0;

这是输出:

元素:1 在 int 数组的位置:0 中找到

在 int 数组的位置:1 中找到元素:2

在 int 数组的位置:2 中找到元素:3

发现空字符!就位:3

发现空字符!就位:4

发现空字符!已到位:5

发现空字符!已到位:6

发现空字符!位置:7

发现空字符!已到位:8

发现空字符!位置:9

元素:69 在 int 数组的位置:10 中找到

发现空字符!已到位:11

发现空字符!已到位:12

| 1 | | 2 | | 3 | |\0 | |\0 | |\0 | |\0 | |\0 | |\0 | | 69 | 69 |\0 | |\0 | |\0 |

那么为什么默认单元格设置为\0 值呢?例如,而不是留空?

空字符不应该只出现在整个数组的末尾吗?谢谢

最佳答案

C 中不要求数组末尾需要有\0。仅 C 字符串 需要 NUL 终止符(通常具有 charwchar_t 或其他字符类型)。在 C 字符串中,\0 字节也不必位于包含它的数组的末尾,但它必须位于字符串部分的末尾。数组中任何位置都有 0 是完全有效的。但如果该数组用作字符串,则标准 C 字符串函数将解释具有最低索引的 0 来表示字符串的结尾。

当您在 C 中使用初始化程序 ({1,2,3}) 声明变量 (nums) 时

int nums[13] = {1,2,3};

初始化程序中未提及的所有索引(3 到 12)的值都初始化为 0。数组中不可能有“空”单元格。所有单元格都会有一个值,由程序(mer)决定将哪些值视为空。

关于C 数组和空字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com