我有一个问题是从这个讨论中引申出来的:C - 修改传递给函数的指针的地址
假设我有以下代码:
#include <stdio.h>
foo(char **ptr){
*ptr++;
}
int main()
{
char *ptr = malloc(64);
char arr[] = "Hello World!";
memcpy(ptr, arr, sizeof(arr));
foo(&ptr);
foo(&ptr);
printf("%s",ptr);
return 0;
}
我想知道这个程序的输出结果,我认为应该是llo World!
。
经过一番调查后,我发现了上面链接中的问题,并意识到在C语言中,函数参数总是按值传递。到目前为止还没有问题。当我们将*ptr++;
表达式改成*ptr = *ptr +1;
时,输出结果变成了:llo World!
。
此时,我有点困惑。为了更改指针地址,我们需要一个双重指针。这是可以理解的,但后增量运算符为什么不同呢?是因为运算符优先级的原因吗?
在这里,我在一个在线C编译器中尝试了这个例子。
++*ptr
也是解决此问题的另一种方法。对我来说,更好、更清晰的陈述是*ptr = *ptr+1;
。谢谢! - asevindik