C 二维指针数组
我正在处理一个需要以下内容的应用程序C 二维指针数组,c,pointers,arrayofstring,C,Pointers,Arrayofstring,我正在处理一个需要以下内容的应用程序 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&
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个常量字符。因此,&List1
是一个指针,指向一个由两个10char
数组组成的数组。如果var\u name
是这些数组的一个数组,那么它是指向两个数组(10const char
的数组)的指针数组。您可以为该部分逐个构建声明:
var\u name
是一个数组…:var\u name[]
- …指针:
*var\u 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\u name
的元素2中,因此您可以使用(*var\u name[2])[1]
引用它
请注意,这需要*
,因为var\u name[i]
是一个指针。下面是您给出的示例代码,其中数组是用&List1
初始化的。更常见的做法是使用指向数组第一个元素的指针,而不是指向数组的指针。(内存中的地址相同,但类型不同。)
支持我们希望消除这个不必要的指针级别,并使用{List1,List2,List3,List4}
初始化var_name
。与C语言中的通常情况一样,这些数组将自动转换为指向其第一个元素的指针。每个数组的第一个元素都是一个10const char
的数组。因此,我们将使用指向10个常量字符数组的指针初始化var\u name
因此,var\u name
将是指向10const char
数组的指针数组。同样,我们可以一块一块地构建声明:
var\u name
是一个数组…:var\u name[]
- …指针的…:
*变量名[]
- …到10的数组…:
(*var_name[])[10]
- …
const char
…:const char(*var_name[])[10]
那么定义和初始化是:
const char (*var_name[])[10] = { List1, List2, List3, List4 };
现在,List3
的元素由var\u name[2]
指向,因此我们可以使用var\u name[2][1]
参考“Book”