两个指针反映相同的值但具有不同的地址(C语言)
Twos pointers reflects the same value but with different address( C language)
我创建了一个指向 return 指针的函数,如下所示:
int* function(int cc){
int* p;
p=&cc;
return p;
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
printf("value for *p1 = %d\r\n",*p1);
printf("value for *function %d\r\n", *function(a));
printf("pointer p1 = %p\r\n", p1);
printf("pointer function= %p\r\n", function(a));
return 0;
}
控制台日志如下:
value for *p1 = 10
value for *function 10
pointer p1 = 0x16d4bb1f8
pointer function= 0x16d4bb1dc
我真的不明白为什么两个指针可以显示相同的值,但它们存储的地址却不同。
您在函数中传递的变量作为参数完成(普通变量而不是指针)。如果你真的想要它应该像你期望的那样工作,那么你应该传递指针而不是普通的 int 局部变量。
进行这些更改:
int* function(int *cc){
int* p;
p=cc;
return p;
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
printf("value for *p1 = %d\r\n",*p1);
printf("value for *function %d\r\n", *function(&a));
printf("pointer p1 = %p\r\n", p1);
printf("pointer function= %p\r\n", function(&a));
return 0;
}
此代码有效并显示了您期望的输出...我们这样做是因为我们不希望将变量的新副本传递到函数中。我们想要相同的地址,所以我们应该在函数中传递变量地址。
这样做
void function(int cc){
int* p;
p=&cc;
cc = 42; // just for fun
printf("value of cc inside function %d\r\n", cc);
printf("value of &cc %p\r\n", &cc);
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
function(a);
printf("value for *p1 = %d\r\n",*p1);
printf("pointer p1 = %p\r\n", p1);
return 0;
}
你会看到 cc 是 a 的副本,如果你在 'function' 中改变它的值它不会改变 'a'。你发现了 c 的 'call by value' 语义。这意味着变量作为副本传递给函数。
我创建了一个指向 return 指针的函数,如下所示:
int* function(int cc){
int* p;
p=&cc;
return p;
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
printf("value for *p1 = %d\r\n",*p1);
printf("value for *function %d\r\n", *function(a));
printf("pointer p1 = %p\r\n", p1);
printf("pointer function= %p\r\n", function(a));
return 0;
}
控制台日志如下:
value for *p1 = 10
value for *function 10
pointer p1 = 0x16d4bb1f8
pointer function= 0x16d4bb1dc
我真的不明白为什么两个指针可以显示相同的值,但它们存储的地址却不同。
您在函数中传递的变量作为参数完成(普通变量而不是指针)。如果你真的想要它应该像你期望的那样工作,那么你应该传递指针而不是普通的 int 局部变量。
进行这些更改:
int* function(int *cc){
int* p;
p=cc;
return p;
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
printf("value for *p1 = %d\r\n",*p1);
printf("value for *function %d\r\n", *function(&a));
printf("pointer p1 = %p\r\n", p1);
printf("pointer function= %p\r\n", function(&a));
return 0;
}
此代码有效并显示了您期望的输出...我们这样做是因为我们不希望将变量的新副本传递到函数中。我们想要相同的地址,所以我们应该在函数中传递变量地址。
这样做
void function(int cc){
int* p;
p=&cc;
cc = 42; // just for fun
printf("value of cc inside function %d\r\n", cc);
printf("value of &cc %p\r\n", &cc);
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
function(a);
printf("value for *p1 = %d\r\n",*p1);
printf("pointer p1 = %p\r\n", p1);
return 0;
}
你会看到 cc 是 a 的副本,如果你在 'function' 中改变它的值它不会改变 'a'。你发现了 c 的 'call by value' 语义。这意味着变量作为副本传递给函数。