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];