怎么可能读取和写入数组

时间:2013-07-01 20:37:23

标签: c arrays indexing size

计划的输出:

#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。此循环必须存储/打印值b[1], b[2], b[3], b[4],而不是b[5],因为循环将在i = 5处终止。
此代码如何打印b[5]的值?
我已经针对不同的数组size测试了它,并且它没有打印任何垃圾值。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

如果您尝试访问数组中不存在的元素,例如array[size],您正在访问阵列后面的内存中的下一个位置。在这种情况下,你很幸运,但如果这意味着你正在访问不允许你的程序执行的内存的一部分,那么你将获得segmentation fault

答案 2 :(得分:1)

您可以使用用于周期而不是,而不是while(i++<size)您可以使用for(i = 0; i < size; i++)来解决您的问题我的朋友:)