我有一个问题,以更好地理解数组和空字节如何工作在C中。C数组和空字节
比方说,我有一个13个单元格的int数组。 比方说,我希望细胞数量:1,2,3和10有一个值。其他剩下的默认值会自动获取nullchar \ 0作为值?
我对\ 0的理解是,nullbyte总是在数组的末尾,它的功能是告诉程序数组在哪里结束。但似乎是错误的
我写了一个简单的PROG键确认,似乎是这样的:
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阵列
元件:2的位点发现:int数组的1
元件:3在位置上发现:int数组的2
发现空字符!在位置:3
找到空字符!在位置:4
找到空字符!在位置:5
找到空字符!在位置:6
找到空字符!在位置:7
找到空字符!在位置:8
找到空字符!在位置:9
元件:69在位置上发现:int数组的10
空焦炭找到!在位置:11
找到空字符!在位置:12
| 1 | | 2 | | 3 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | 69 | | \ 0 | | \ 0 | | \ 0 |
那么为什么默认单元格设置为\ 0值?而不是被留下空作为例子?
空字符不应该只在整个数组的末尾一次? 谢谢
对于标量,静态分配的内存填充0或对指针填充NULL(\ 0)。如果你把\ 0作为标量,它将被转换为0.没有“空”之类的东西。您不应该将NULL(\ 0)与int进行比较,而是使用文字0. – Tibrogargan
“我对\ 0的理解是,nullbyte总是在数组的末尾..”是完全错误的。您正在混淆常规数组和C字符串。 – usr2564301
@Tibrogargan'\ 0'(NUL字符)与'NULL'指针不同。 '\ 0'是一个所有位都设置为0的字节,它总是与“int”0相等。 – Kninnug