指针到指针算术未按预期运行
Pointer-to-pointer arithmetic not behaving as expected
我有下面的代码,但不明白为什么会出现段错误。我在哪里搞砸了。我正在尝试学习如何 access/modify 一个字符 **。谢谢!
#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] = '[=10=]';
printf("%s\n", *wordPtrPtr);
return 0;
}
注意 operator precedence。在访问数组元素之前,您需要先取消引用 wordPtrPtr
:
(*wordPtrPtr)[0] = 'A';
(*wordPtrPtr)[1] = 'B';
(*wordPtrPtr)[2] = '[=10=]';
你也可以这样试试
wordPtr[0] = 'A';
wordPtr[1] = 'B';
wordPtr[2] = '[=10=]';
或者
*(*wordPtrPtr +0) = 'A';
*(*wordPtrPtr +1) = 'B';
*(*wordPtrPtr +2) = '[=11=]';
我有下面的代码,但不明白为什么会出现段错误。我在哪里搞砸了。我正在尝试学习如何 access/modify 一个字符 **。谢谢!
#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] = '[=10=]';
printf("%s\n", *wordPtrPtr);
return 0;
}
注意 operator precedence。在访问数组元素之前,您需要先取消引用 wordPtrPtr
:
(*wordPtrPtr)[0] = 'A';
(*wordPtrPtr)[1] = 'B';
(*wordPtrPtr)[2] = '[=10=]';
你也可以这样试试
wordPtr[0] = 'A';
wordPtr[1] = 'B';
wordPtr[2] = '[=10=]';
或者
*(*wordPtrPtr +0) = 'A';
*(*wordPtrPtr +1) = 'B';
*(*wordPtrPtr +2) = '[=11=]';