例如,我们说我有list<string>
。因此,“Hi”的基地址(假设为100)将存储在char *arry[] ={"Hi","Hello"}
中。所以要访问嗨我们为什么不写arry[0]
。当我们取消引用它时,'arry'将给出该数组的基地址 arry我们将获得100,当我们再次取消引用100时,我们将获得“H”。简而言之,我们需要写**arry
。那我们为什么要写**arry
?当我使用*arry
时,它会误给我提错'错误:''令牌之前的预期标识符'。
答案 0 :(得分:1)
写作时
char *arry[];
您正在声明指向字符的指针数组。 arry
是一个数组,它的每个元素都是一个指针,可以指向char
。
如果使用两个间接运算符**
,则会剥离两个间接级别。这没关系,但你最终得到的是char
类型的值,这是数组的基本类型。 char
不是字符串。
但是这很好用
printf("%c\n", **arry);
它打印数组中第一个字符串的第一个字符,或'H'
。
当您尝试使用**
然后打印字符串时它不起作用的原因是,正如我所说,字符串不是字符。 字符数组中的C字符串。或者,可以使用指向char
的指针方便地访问字符串,指向字符串的第一个字符。
因此,如果你想打印字符串,你只想剥离一个间接层,而不是两个。您最多只需要一个*
。由于通过指向char
的指针方便地访问字符串,因此当您在%s
中使用printf
时,它想要的是指向char
的指针。所以要打印字符串,你需要
printf("%s\n", *arry);
或
printf("%s\n", arry[0]);