2017-10-08 89 views
1

我有下面的代碼,不能理解爲什麼它是段的。我在哪裏搞亂了。我正試圖學習如何訪問/修改char **。謝謝!指針到指針的算術表現不如預期

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    char * wordPtr; 
    char **wordPtrPtr = &wordPtr; 
    *wordPtrPtr = (char *) malloc(3 * sizeof(char)); 

    *wordPtrPtr[0] = 'A'; 
    *wordPtrPtr[1] = 'B'; 
    *wordPtrPtr[2] = '\0'; 

    printf("%s\n", *wordPtrPtr); 

    return 0; 
} 
+0

'* wordPtrPtr [指數]的東西' - >' (* wordPtrPtr)[index]' – BLUEPIXY

回答

1

小心operator precedence。您需要取消引用wordPtrPtr首先訪問數組元素之前:

(*wordPtrPtr)[0] = 'A'; 
(*wordPtrPtr)[1] = 'B'; 
(*wordPtrPtr)[2] = '\0'; 
+0

或'wordPtrPtr [0] [0] = ...' –

1

您也可以嘗試這樣

wordPtr[0] = 'A'; 
wordPtr[1] = 'B'; 
wordPtr[2] = '\0'; 

或者

*(*wordPtrPtr +0) = 'A'; 
*(*wordPtrPtr +1) = 'B'; 
*(*wordPtrPtr +2) = '\0';