访问指针数组中的数组

时间:2014-04-05 10:17:53

标签: c arrays string pointers

让我们说我在C中有一个指针数组。例如:

char** strings

数组中的每个指针指向不同长度的字符串。 如果我愿意,例如:strings + 2,我会到第三个字符串,虽然长度可能不同吗?

3 个答案:

答案 0 :(得分:4)

是的,您将(假设阵列已正确填充)。想象一下双指针情况作为一个表。然后,您具有以下内容,其中每个字符串位于完全不同的内存地址。请注意,所有地址都已组成,可能在任何系统中都不是真实的。

strings[0] = 0x1000000
strings[1] = 0xF0;
...
strings[n] = 0x5607;

0x1000000 -> "Hello"
0xF0 -> "World"

请注意,实际文本中没有一个存储在字符串中。这些地址的存储将包含实际文本。

出于这个原因,strings + 2将向字符串指针添加两个,这将产生strings[2],这将产生一个内存地址,然后可以用它来访问字符串。

答案 1 :(得分:2)

strings + 2string指向的缓冲区的第3个元素的地址。
*(strings + 2)strings[2]是第3个元素,它也是指向字符缓冲区的指针。

答案 2 :(得分:0)

我认为您希望通过表达式

访问第三个元素
strings[2];

但情况并非如此,因为请查看表达式string[2]

的类型
Type is char *

按照标准

A 'n' element array of type 't' will be decayed into pointer of type __t__.With the exception when expression is an operand to '&' operator and 'sizeof' operator.

所以strings [2]相当于*(strings + 2)所以它将在第三个位置打印pointer to pointer的内容,这是pointer的内容,即地址。<登记/> 但是

strings+2;
类型为char **

将打印3 rd location's address,i.e,address of the 3rd element of array of pointer, whose base address is stored in **string.

但是在你的问题中,你没有向char ** strings展示任何作业,而我正在回答假设它是用特定的指针数组初始化的。
根据你的问题,这是愚蠢的

*(strings + 2)

因为它没有初始化。