Array与两个声明为C的数组连接在一起

时间:2015-11-01 00:45:19

标签: c arrays concatenation

当我运行此代码时:

#include <stdio.h>

int main() {

    int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    int y[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};

    int t;

    for (t = 0 ; t < 22 ;t++){
        printf( "%d\t\n", x[t]);
    }

    return 0;
}

由于某种原因,C将y数组连接到x数组上。有人可以解释为什么这样做吗?感谢。

3 个答案:

答案 0 :(得分:3)

您的编译器将两个数组彼此相邻放置在程序的静态数据区域中。因为它们都由4字节值组成,所以它们在x86字边界上对齐,因此它们之间不会有填充。

无法保证此行为,您的代码依赖于未定义的行为:超出数组的范围。

答案 1 :(得分:2)

即使它发生以这种方式工作,你正在从它的边界访问一个数组,所以你有 Undefined Behavior (UB)。

UB可以采取任何形式,这里就是这样,(因为数组在内存中彼此相邻,但你不应该依赖它)。

答案 2 :(得分:0)

当为两个阵列分配内存时,它们碰巧被放置在连续内存位置的堆栈中。不能保证他们会以这种方式安排,但在这种情况下他们是。

在构建过程中,编译器和/或链接器决定将放置内存变量的位置。在这样一个简单的程序中,有一个很好的机会变量,它们在另一个之后被声明为一个,将在内存中彼此相邻放置。