2D指针数组

问题描述

我正在处理需要以下内容的应用程序。

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打印“ Book”,那我该如何打印呢?

解决方法

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

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

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

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

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

支持我们想消除这种不必要的指针级别,并用var_name初始化{ List1,List2,List3,List4 }。像在C语言中一样,这些数组将自动转换为指向其第一个元素的指针。每个数组的第一个元素是10 const char的数组。因此,我们将使用指向10个var_name数组的指针来初始化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,List4 };

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...