首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2维指针数组

2维指针数组
EN

Stack Overflow用户
提问于 2020-08-23 02:11:35
回答 1查看 30关注 0票数 0

我正在使用一个应用程序,它需要以下内容。

代码语言:javascript
复制
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存储到另一个数组中,如下所述。

代码语言:javascript
复制
char **var_name[2][2] = { &List1, &List2, &List3, &List4};

我应该调用什么来"var_name"?&这是正确的方式吗?

另外,如果我想使用XYZ打印"Book“,那么我如何打印它?

EN

回答 1

Stack Overflow用户

发布于 2020-08-23 02:44:37

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 (*var_name[])[2][10].

const char

然后,您可以定义并初始化它:

代码语言:javascript
复制
char (*var_name[])[2][10] = { &List1, &List2, &List3, &List4};

"Book"List3的元素1中,它在var_name的元素2中,所以您可以用(*var_name[2])[1]来引用它。

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

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

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

  • var_name是一个数组…:var_name[].
  • …指针的…:*var_name[].
  • …至10个…的阵列:(*var_name[])[10].
  • const char…:const char (*var_name[])[10].

那么定义和初始化是:

代码语言:javascript
复制
const char (*var_name[])[10] = { List1, List2, List3, List4 };

现在var_name[2]指向了List3的元素,所以我们可以用var_name[2][1]引用"Book"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63539540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档