问题描述
我正在处理需要以下内容的应用程序。
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 char
:const 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]
。