Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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的两个数组连接_C_Arrays_Concatenation - Fatal编程技术网

数组与声明为C的两个数组连接

数组与声明为C的两个数组连接,c,arrays,concatenation,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]); } retur

当我运行此代码时:

#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;
}
#包括
int main(){
intx[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;
对于(t=0;t<22;t++){
printf(“%d\t\n”,x[t]);
}
返回0;
}

出于某种原因,C将y数组连接到x数组上。有人能解释一下它为什么这么做吗?谢谢。

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


这种行为不能保证,您的代码依赖于未定义的行为:超出数组的边界。

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


这种行为是不能保证的,您的代码依赖于未定义的行为:超出数组的边界。

当为两个数组分配内存时,它们恰好位于堆栈上相邻的内存位置。不能保证他们会这样安排,但在这种情况下,他们是这样安排的


在构建过程中,编译器和/或链接器决定内存中变量的放置位置。在这样一个简单的程序中,一个接一个声明的相同类型的变量很有可能会被放置在内存中。当为两个数组分配内存时,它们恰好被放置在相邻内存位置的堆栈上。不能保证他们会这样安排,但在这种情况下,他们是这样安排的

在构建过程中,编译器和/或链接器决定内存中变量的放置位置。在这样一个简单的程序中,一个接一个声明的同一类型变量很有可能会被放置在内存中。即使它恰好以这种方式工作,您访问的数组超出了它的边界,因此您有未定义的行为(UB)

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

即使它恰好以这种方式工作,您访问的数组超出了它的界限,因此您有未定义的行为(UB)


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

它不是串联它,只是在之后存储,你的计数器太高了。@maraca那为什么之后会使用随机整数呢?我得到了输出123456789104195917024…它不是连接它,它只是在之后存储的,你的计数器太高了。@maraca那为什么之后是随机整数呢?我得到的输出是123456789104195917024…那么为什么之后是随机整数呢?我得到了输出1 2 3 4 5 6 7 8 9 10 4195917 0 2 4…@Plinth两个数组之间的一些间隙,未初始化,很简单。UB是UB。使用另一个编译器或另一个平台,您可能会发现同一个错误会导致不同的行为。这就是为什么我们不应该浪费太多的时间来分析UB。那么,为什么要在分析之后使用随机整数呢?我得到了输出1 2 3 4 5 6 7 8 9 10 4195917 0 2 4…@Plinth两个数组之间的一些间隙,未初始化,很简单。UB是UB。使用另一个编译器或另一个平台,您可能会发现同一个错误会导致不同的行为。这就是为什么我们不应该浪费太多时间来分析UB。