3

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

int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];

可以以相同或相似的方式访问两个二维数组。我的意思是:它们可以交换吗?我问这个是因为,由于升级,我想避免重构我之前编写的所有代码。

非常感谢。

4

3 回答 3

3

根据这段代码,应该没有区别。

#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;
}
于 2013-10-22T10:49:01.570 回答
1

尽管二维数组可以表示为一维数组(严格来说,行为是未定义的),但相同大小的二维数组和一维数组并不相同/相似。

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

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

void foo(int *p)  
{

}

对于这两种情况。first可以通过传递foo,&first[i][j]*firstfirst[i]其中ijint类型并表示数组绑定内的行和列索引)来传递,而数组second可以传递为secondor &second[i]
您不能将first(unlike second) 和second[i](unlike first[i])foo作为参数传递给 the,因为它们与foo(which is of int *) 的预期参数不兼容。

于 2013-10-22T11:04:16.060 回答
0
int first[1][10];
int second[10];

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

于 2013-10-23T12:10:27.970 回答