簡體   English   中英

指向指針的指針

[英]Pointer Pointing to Pointer

可以說我有一個變量:

char** code;

然后,我做:

*code[0] = "Lucas"

可以說**code持有一個指針數組( *code是我在制作字符串的數組), *code[0]等於"Lucas" ,而*code[0][2]等於'c'

抱歉,如果它看起來很基礎,我對雙指針感到非常困惑! 提前致謝!

-盧卡斯·吉安科拉(Lucas Giancola)

可以說**code持有一個指針數組是否有效

不它不是。 您已經為單個指針分配了空間。 您已經告訴編譯器,該指針將指向另一個指針(您尚未創建),該指針指向一個字符(您也尚未創建)

*code[0] = "Lucas"

無效的代碼,無法編譯

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

如果你有

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"將位於已編譯代碼的只讀部分。 在將其分配給char *類型的變量之前,需要使用strdup復制"Lucas"

您需要類似:

 code[0] = strdup("Lucas");

現在,您可以使用code[0]訪問整個字符串。 您可以使用*code[0]訪問該字符串的第一個字符。 您也可以使用code[0][0]訪問該字符串的第一個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM