0

程序的输出:

#include <stdio.h>

int main()
{
    int size;

    printf("Enter the size of array: ");
    scanf("%d",&size);

    int b[size],i = 0;
    printf("Enter %d integers to be printed: ",size);
    while(i++ < size)
    {
        scanf("%d",&b[i]);
        printf("%d     %d\n", i, b[i]);
    }
    return 0;       
}

输入size = 5数字:

0    1    2    3    4

1    0
2    1
3    2
4    3
5    4

其中第一列为i数组元素,第二列为数组元素b
很明显,i在循环中while(i++ < size) {递增到1进入循环之前。该循环应该必须存储/打印 at/of 的值,b[1], b[2], b[3], b[4]但不是b[5]因为循环将在 终止i = 5
此代码如何打印 的值b[5]
我已经针对不同的数组对其进行了测试,size并且它没有打印任何垃圾值。

4

3 回答 3

2

通过读取和写入数组,您的程序会调用未定义的行为。这并不意味着它必须崩溃或打印垃圾值,它可以假装工作正常。显然,这就是在这种情况下发生的事情。

于 2013-07-01T20:42:44.363 回答
1

在您的循环中,在增加i < size之前检查条件i。但是,i在进入循环体之前而不是之后增加,因此b[5]在这种情况下可以访问,就像i在检查之后增加i < size一样i=4。您不希望这样,因为这会导致未定义的程序行为。

如果您尝试访问数组中不存在的元素,例如array[size],您正在访问数组之后内存中的下一个点。在这种情况下你很幸运,但如果这意味着你正在访问你的程序不允许这样做的内存部分,你会得到一个segmentation fault.

于 2013-07-01T20:59:36.530 回答
1

你可以使用for循环而不是一段时间,所以while(i++<size)你可以使用for(i = 0; i < size; i++)它来解决你的问题,我的朋友:)

于 2013-07-01T23:39:15.620 回答