超越数组边界

数组是从零开始的,即索引始终从 0 开始,以索引数组长度减 1 结束。因此,下面的代码不会输出数组的第一个元素,并将输出它打印的最终值的垃圾。

#include <stdio.h>

int main(void)
{
    int x = 0;
    int myArray[5] = {1, 2, 3, 4, 5}; //Declaring 5 elements

    for(x = 1; x <= 5; x++) //Looping from 1 till 5.
       printf("%d\t", myArray[x]);

    printf("\n");
    return 0;
}

输出:2 3 4 5 GarbageValue

以下演示了实现所需输出的正确方法:

#include <stdio.h>

int main(void)
{
    int x = 0;
    int myArray[5] = {1, 2, 3, 4, 5}; //Declaring 5 elements

    for(x = 0; x < 5; x++) //Looping from 0 till 4.
       printf("%d\t", myArray[x]);

    printf("\n");
    return 0;
}

输出:1 2 3 4 5

在使用数组之前了解数组的长度非常重要,否则你可能会通过访问超出范围的内存位置来破坏缓冲区或导致分段错误。