有人可以向我解释/给出一个推理,为什么变量i在下面的代码片段中的主函数的值不会通过函数test1改变,而它确实通过test2改变了?我认为单个指针应该足以改变i的值.为什么我们应该使用双指针?
#include <stdio.h>
void test1(int* pp)
{
int myVar = 9999;
pp = &myVar;
}
void test2(int** pp)
{
int myVar = 9999;
*pp = &myVar;
}
int main()
{
printf("Hej\n");
int i=1234;
int* p1;
p1 = &i;
test1(p1);
printf("does not change..., p1=%d\n",*p1);
test2(&p1);
printf("changes..., p1=%d\n",*p1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在C中,参数按值传递.这意味着test1当您传递pp副本时,由指针构成,当您更改它时,对副本而不是指针本身进行更改.随着test2副本是一个双指针的,但是当你提领,并指定在这里
*pp = &myVar;
Run Code Online (Sandbox Code Playgroud)
你正在改变所指向的东西,而不是改变pp自己.请注意,此行为test2未定义,如此处的其他一些答案中所述