0

我正在开发一个需要以下内容的应用程序。

const char List1[2][10] = {"Stack","Overflow"};
const char List2[2][10] = {"Goo","Gle"};
const char List3[2][10] = {"Face","Book"};
const char List4[2][10] = {"Pizza","Hutt"};

现在我必须将 List1,..,List4 存储到另一个数组中,如下所述。

char **var_name[2][2] = { &List1, &List2, &List3, &List4};

我应该叫什么“var_name”?& 方法对吗?

另外,如果我想使用 XYZ 打印“书”,那么我该如何打印呢?

4

1 回答 1

1

List1是由两个数组组成的数组 10 const char&List1指向两个 10 数组的数组的指针也是如此char。如果var_name是一个数组,它是一个指针数组,指向一个由两个数组组成的数组 10 const char。您可以逐个构建该声明:

  • var_name是一个数组…… var_name[]:。
  • ……指针:*var_name[]
  • ……到两个数组…… (*var_name[])[2]:。
  • ……10 个数组…… (*var_name[])[2][10]:。
  • …… const char:。const char (*var_name[])[2][10]_

然后你可以定义和初始化它:

char (*var_name[])[2][10] = { &List1, &List2, &List3, &List4};

"Book"在元素 1 中List3,在元素 2 中var_name,所以可以用(*var_name[2])[1].

请注意,这需要*, 因为var_name[i]是一个指针。这遵循您提供的示例代码,其中数组初始化为&List1. 使用指向数组第一个元素的指针而不是指向数组的指针更为常见。(内存中的地址相同,但类型不同。)

假设我们想消除这个不必要的指针级别并var_name用初始化{ List1, List2, List3, List4 }。与 C 中的往常一样,这些数组将自动转换为指向其第一个元素的指针。每个数组的第一个元素是 10 的数组const char。因此,我们将var_name使用指向 10 数组的指针进行初始化const char

因此,var_name将是一个指向 10 数组的指针数组const char。同样,我们可以逐个构建声明:

  • var_name是一个数组…… var_name[]:。
  • ……指针…… *var_name[]:。
  • ...到10个数组...:(*var_name[])[10]
  • …… const char:。const char (*var_name[])[10]_

那么定义和初始化就是:

const char (*var_name[])[10] = { List1, List2, List3, List4 };

现在 的 元素List3都指向 了var_name[2],所以我们可以参考"Book"with var_name[2][1]

于 2020-08-22T18:44:36.790 回答