2

我编写了一个小程序来突出我在 C 中遇到的问题。我希望在下面的代码中,显示 for 循环将打印 0,但在 null 时退出;但是,循环在 0 处退出。我到底错过了什么/我不明白吗?非常感谢您的帮助。

#include <stdio.h>

int main (void)
{
    int i = 0;
    int iArray[] = {1, 2, 0, 4, 5, '\0'};
    int cArray[] = {1, 2, 0, 4, 5, '\0'};

    for(i=0; iArray[i] != '\0'; i++)
    {
        printf("\nElement: %d", iArray[i]);
    }

    for(i=0; cArray[i] != '\0'; i++)
    {
        printf("\nElement: %d", iArray[i]);
    }
    return 0;
}

谢谢,丹

4

4 回答 4

2

字符文字'\0'实际上与整数文字相同0。所以当它在你的数组中达到零时它会停止。

更准确地说,'\0'是八进制值为零。所有带有前导零的字符(当然还有字符串)转义序列都是八进制值,并且将由编译器“按原样”插入。


对于数组,还有另一种查找结尾的方法,即获取数组中的项目数,如

for(i=0; i < sizeof(iArray) / sizeof(iArray[0]); i++)

但是,使用 egsizeof(iArray) / sizeof(iArray[0])获取数组中项目数的技巧仅适用于真实数组。一旦您传递一个数组(例如作为函数的参数),它就会衰减为一个指针,并且不能再使用“技巧”。

于 2013-05-10T08:26:50.663 回答
2
0 == '\0'

所以iArray[i] != '\0'是一样的iArray[i] != 0

并且您的数组包含0第三个元素,因此 for 循环将仅打印每个数组的 2 个第一个元素。

于 2013-05-10T08:36:11.687 回答
1

您缺少引号,您似乎想要创建一串数字。数字'1'与具有值的字符不同1

此外,你的数组是神秘的int,当它们应该是char

尝试:

const char iArray[] = { '1', '2', '0', '4', '5', '\0'};

这当然可以更简单地写成:

const char iArray[] = "12045";
于 2013-05-10T08:26:58.500 回答
1

因为0'\0是等价的。实际上,第一个是一个数字,第二个是一个 char,当插入到数组中时,它被强制转换(转换)为 int。可能您想创建一个字符串,因此创建一个 type 数组char,将每个数字括在'0'引号中并替换%d%c.

注意:'0'表示字符零,与字面0量和等价物不同,如您在 ASCII 表'\0'中所见。同样的情况发生在vs上。1'1'

如果您想要一个整数数组,那么由于第一句中所述的原因,您不能'\0'用作终止符(除非您确定 0 不会出现在数组中),将数组的长度保持在某个地方并将其用于迭代。

于 2013-05-10T08:27:08.953 回答