Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Multidimensional Array_Size_Memory Address - Fatal编程技术网

C:二维数组和相同大小的普通数组之间的差异

C:二维数组和相同大小的普通数组之间的差异,c,arrays,multidimensional-array,size,memory-address,C,Arrays,Multidimensional Array,Size,Memory Address,鉴于以下声明,我想知道: int first[1][COLUMN_NUMBER]; int second[COLUMN_NUMBER]; 两个二维数组可以以相同或类似的方式访问。我的意思是:它们可以交换吗?我这样问是因为,由于升级,我希望避免重构我以前编写的所有代码 非常感谢。根据,应该没有区别 #include <stdio.h> int main(void) { int const COLUMN_NUMBER = 10; union { int f

鉴于以下声明,我想知道:

int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
两个二维数组可以以相同或类似的方式访问。我的意思是:它们可以交换吗?我这样问是因为,由于升级,我希望避免重构我以前编写的所有代码

非常感谢。

根据,应该没有区别

#include <stdio.h>

int main(void) {
    int const COLUMN_NUMBER = 10;
    union {
      int first[1][COLUMN_NUMBER];
      int second[COLUMN_NUMBER];
      } u;
    u.first[0][5] = 3;
    printf("%d\n", u.second[5]);
    return 0;
}
#包括
内部主(空){
int const COLUMN_NUMBER=10;
联合{
int first[1][COLUMN_NUMBER];
整数秒[列号];
}u;
u、 第一[0][5]=3;
printf(“%d\n”,单位秒[5]);
返回0;
}

虽然2D数组可以表示为A(严格来说是A),但相同大小的2D数组和1D数组并不相同/相似

我的意思是:它们可以交换吗

这可能取决于具体情况。
通过调用函数可以看到一个简单的区别

void foo(int *p)  
{

}
对于这两个案例。
first
可以通过传递
&first[i][j]
*first
first[i]
传递给
foo
(其中
i
j
int
类型,表示数组范围内的行和列索引)而数组
second
可以作为
second
&second[i]
传递
不能将
first
(不同于
second
)和
second[i]
(不同于
first[i]
)作为参数传递给
foo
,因为它们与
foo
(属于
int*
)的预期参数不兼容

对于本例,这两条语句在内存分配方面没有区别。第一条语句声明了一个包含1行10列的数组。类似地,第二条语句生成一个仅包含10个元素的数组。从逻辑上讲,两个语句不同,但在这里它们占用相同的内存空间。
对于第一条语句,如果我们有int first[10][10],那么它将声明一个包含10行10列的数组。

@user1770426;所提供的链接与此问题有何关联?
int first[1][10];
int second[10];