Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 需要帮助理解这些for循环输出吗_C - Fatal编程技术网

C 需要帮助理解这些for循环输出吗

C 需要帮助理解这些for循环输出吗,c,C,我还是不明白上次它在干什么 当它到达4

我还是不明白上次它在干什么


当它到达
4<4 | |?
时,它是否应该中断?

此代码具有未定义的行为,因为它将访问数组外部的元素。如果将代码更改为以下内容,则可以看到此行为:

int i, a[2] = {-6, -4};
for (i = 0; i < 4 || a[i]; i++)
    putchar('*');
这是访问9个元素(索引8是从零开始的索引数组的元素9)。一旦你有了未定义的行为,所有的赌注基本上都是无效的。程序也可能会循环,直到出现分段错误


i==4
i
大于4时,它不会中断,因为
a[i]
为真,因此
i<4|a[i]
也为真
a[i]
在数组长度内为true,然后您访问数组外的某个元素(第8个元素,索引7),然后您有未定义的行为。

此代码有未定义的行为,因为它将访问数组外的元素。如果将代码更改为以下内容,则可以看到此行为:

int i, a[2] = {-6, -4};
for (i = 0; i < 4 || a[i]; i++)
    putchar('*');
这是访问9个元素(索引8是从零开始的索引数组的元素9)。一旦你有了未定义的行为,所有的赌注基本上都是无效的。程序也可能会循环,直到出现分段错误


i==4
i
大于4时,它不会中断,因为
a[i]
为真,因此
i<4|a[i]
也为真
a[i]
在数组长度内为true,然后您访问数组外的某个元素(第8个元素,索引7),然后您有未定义的行为。

此代码有未定义的行为,因为它将访问数组外的元素。如果将代码更改为以下内容,则可以看到此行为:

int i, a[2] = {-6, -4};
for (i = 0; i < 4 || a[i]; i++)
    putchar('*');
这是访问9个元素(索引8是从零开始的索引数组的元素9)。一旦你有了未定义的行为,所有的赌注基本上都是无效的。程序也可能会循环,直到出现分段错误


i==4
i
大于4时,它不会中断,因为
a[i]
为真,因此
i<4|a[i]
也为真
a[i]
在数组长度内为true,然后您访问数组外的某个元素(第8个元素,索引7),然后您有未定义的行为。

此代码有未定义的行为,因为它将访问数组外的元素。如果将代码更改为以下内容,则可以看到此行为:

int i, a[2] = {-6, -4};
for (i = 0; i < 4 || a[i]; i++)
    putchar('*');
这是访问9个元素(索引8是从零开始的索引数组的元素9)。一旦你有了未定义的行为,所有的赌注基本上都是无效的。程序也可能会循环,直到出现分段错误

i==4
i
大于4时,它不会中断,因为
a[i]
为真,因此
i<4|a[i]
也为真
a[i]
在数组长度内为true,然后访问数组外的某个元素(第8个元素,索引7),然后就有了未定义的行为。

您的代码调用,因为循环条件是假的,导致访问数组超出其边界

请记住,在C语言中,对数组没有边界检查,或者在数组末尾没有任何隐式null。许多无效代码编译得很好。作为程序员,您有责任确保代码有效

正确的循环条件将确保阵列不会在其边界之外被访问:

Accessing element: 0
*Accessing element: 1
*Accessing element: 2
*Accessing element: 3
*Accessing element: 4
*Accessing element: 5
*Accessing element: 6
*Accessing element: 7
*Accessing element: 8
*
for(i=0;i<(a的大小/a的大小[0])&&a[i];i++)
putchar('*');
您的代码之所以调用,是因为循环条件是伪造的,导致访问数组超出其边界

请记住,在C语言中,对数组没有边界检查,或者在数组末尾没有任何隐式null。许多无效代码编译得很好。作为程序员,您有责任确保代码有效

正确的循环条件将确保阵列不会在其边界之外被访问:

Accessing element: 0
*Accessing element: 1
*Accessing element: 2
*Accessing element: 3
*Accessing element: 4
*Accessing element: 5
*Accessing element: 6
*Accessing element: 7
*Accessing element: 8
*
for(i=0;i<(a的大小/a的大小[0])&&a[i];i++)
putchar('*');
您的代码之所以调用,是因为循环条件是伪造的,导致访问数组超出其边界

请记住,在C语言中,对数组没有边界检查,或者在数组末尾没有任何隐式null。许多无效代码编译得很好。作为程序员,您有责任确保代码有效

正确的循环条件将确保阵列不会在其边界之外被访问:

Accessing element: 0
*Accessing element: 1
*Accessing element: 2
*Accessing element: 3
*Accessing element: 4
*Accessing element: 5
*Accessing element: 6
*Accessing element: 7
*Accessing element: 8
*
for(i=0;i<(a的大小/a的大小[0])&&a[i];i++)
putchar('*');
您的代码之所以调用,是因为循环条件是伪造的,导致访问数组超出其边界

请记住,在C语言中,对数组没有边界检查,或者在数组末尾没有任何隐式null。许多无效代码编译得很好。作为程序员,您有责任确保代码有效

正确的循环条件将确保阵列不会在其边界之外被访问:

Accessing element: 0
*Accessing element: 1
*Accessing element: 2
*Accessing element: 3
*Accessing element: 4
*Accessing element: 5
*Accessing element: 6
*Accessing element: 7
*Accessing element: 8
*
for(i=0;i<(a的大小/a的大小[0])&&a[i];i++)
putchar('*');
如果整数为非零,则将其视为“真”。第一个例子中的所有情况,只要看一个[I],它的值都是非零的,任何与真或的运算都是真的

(@CyberSpock更详细地解释了这一点)

如果整数为非零,则认为它为“真”。第一个例子中的所有情况,只要看一个[I],它的值都是非零的,任何与真或的运算都是真的

(@CyberSpock更详细地解释了这一点)

如果整数为非零,则认为它为“真”。第一个例子中的所有情况,只要看一个[I],它的值都是非零的,任何与真或的运算都是真的

(@CyberSpock更详细地解释了这一点)

整数被认为是一个整数
#define N 7

for (i = 0; i < N && a[i]; i++)