指向指针的指针

时间:2015-02-10 22:58:45

标签: c pointers

假设我有一个变量:

char** code;
然后我做了:

*code[0] = "Lucas"

有效的说法是,**code包含一系列指针(*code是我正在创建字符串的数组)并且*code[0]将等于"Lucas"并且*code[0][2]将等于'c'

对不起,如果看起来很简单,我会对双指点感到困惑!提前谢谢!

-Lucas Giancola

2 个答案:

答案 0 :(得分:3)

有效的说法是,**code包含一系列指针

不,不是。您已为单个指针分配了空间。你告诉编译器该指针将指向另一个指向一个字符(你还没有创建过)的指针(你还没有创建)

*code[0] = "Lucas"

不是有效的代码而且没有编译

prog.cpp:6:8: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
  *f[0] = "Lucas";

答案 1 :(得分:2)

如果你有

char** code;
*code[0] = "Lucas";

由于您没有为code分配任何内存,因此您将遇到未定义的行为。

您需要使用:

char** code = malloc(SOME_SIZE*sizeof(*code));

即使在那之后,使用:

*code[0] = "Lucas";

不好。这有几个问题。

  1. code[0]是一个指针。 *code[0]是指针解除引用。如果code[0]中已有一些字符串,则*code[0]将成为该字符串的第一个字符。因此,这项任务是错误的。

  2. 此外,"Lucas"将位于已编译代码的只读部分。在将"Lucas"分配给strdup类型的变量之前,您需要使用char *复制 code[0] = strdup("Lucas");

  3. 您需要以下内容:

    code[0]

    现在您可以使用*code[0]来访问整个字符串。您可以使用code[0][0]访问该字符串的第一个字符。您还可以使用{{1}}来访问该字符串的第一个字符。