2017-10-08 83 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';