【发布时间】:2021-12-27 19:17:20
【问题描述】:
我对此讨论提出了一个问题:C - modify the address of a pointer passed to a function
假设我有以下代码:
#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 中,函数的参数总是通过 value 传递。到目前为止没有任何问题。将*ptr++; 表达式更改为-> *ptr = *ptr +1; 输出变为:llo World!。
在这一点上,我可以说我有点困惑。为了改变指针地址,我们需要一个双指针。这很好,但为什么后增量操作会有所不同?是不是因为运算符优先级?
Here我在在线 C 编译器中尝试了该示例。
【问题讨论】:
标签: c pointers pass-by-reference post-increment