为什么我们不引用char指针数组两次?

时间:2018-01-22 17:15:42

标签: c

例如,我们说我有list<string>。因此,“Hi”的基地址(假设为100)将存储在char *arry[] ={"Hi","Hello"}中。所以要访问嗨我们为什么不写arry[0]。当我们取消引用它时,'arry'将给出该数组的基地址 arry我们将获得100,当我们再次取消引用100时,我们将获得“H”。简而言之,我们需要写**arry。那我们为什么要写**arry?当我使用*arry时,它会误给我提错'错误:''令牌之前的预期标识符'。

1 个答案:

答案 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]);