鉴于以下声明,我想知道是否:
int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
可以以相同或相似的方式访问两个二维数组。我的意思是:它们可以交换吗?我问这个是因为,由于升级,我想避免重构我之前编写的所有代码。
非常感谢。
鉴于以下声明,我想知道是否:
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;
}
尽管二维数组可以表示为一维数组(严格来说,行为是未定义的),但相同大小的二维数组和一维数组并不相同/相似。
我的意思是:它们可以交换吗?
这可能取决于具体情况。
通过调用函数可以看到一个简单的区别
void foo(int *p)
{
}
对于这两种情况。first
可以通过传递foo
,&first[i][j]
或*first
(first[i]
其中i
和j
是int
类型并表示数组绑定内的行和列索引)来传递,而数组second
可以传递为second
or &second[i]
。
您不能将first
(unlike second
) 和second[i]
(unlike first[i]
)foo
作为参数传递给 the,因为它们与foo
(which is of int *
) 的预期参数不兼容。
int first[1][10];
int second[10];
对于此示例,这两个语句在内存分配方面没有区别。第一条语句声明了一个 1 行 10 列的数组。类似地,第二条语句创建了一个只有 10 个元素的数组。从逻辑上讲,两个语句不同,但这里都占用相同的内存空间。在第一个语句的情况下,如果我们有 int first[10][10] 那么它将声明一个 10 行和 10 列的数组。