伙伴们,ptr如何获得之前的价值?代码很简单,我只是想知道它为什么不存储在函数中分配的地址值。
#include<stdio.h>
#include<stdlib.h>
void test(int*);
int main( )
{
int temp;
int*ptr;
temp=3;
ptr = &temp;
test(ptr);
printf("\nvalue of the pointed memory after exiting from the function:%d\n",*ptr);
printf("\nvalue of the pointer after exiting from the function:%d\n",ptr);
system("pause ");
return 0;
}
void test(int *tes){
int temp2;
temp2=710;
tes =&temp2;
printf("\nvalue of the pointed memory inside the function%d\n",*tes);
printf("\nvalue of the pointer inside the function%d\n",tes);
}
输出是:
函数内指向内存的值: 710
函数内指针的值: 3405940
退出函数后指向内存的值: 3
退出函数后指针的值: 3406180
答案 0 :(得分:6)
您按值传递了指针。
test
内的指针是main
内指针的副本。对副本所做的任何更改都不会影响原件。
这可能会让人感到困惑,因为通过使用int*
,您将int
传递一个句柄(“引用”,实际上是一个引用是C ++中存在的独立内容),从而避免了int
的副本。但是,指针本身就是一个对象,并且你按值传递那个。
(您还试图将指针指向函数int
的本地test
。使用它将无效。)
答案 1 :(得分:1)
指针按值传递给函数,换句话说,就是复制它。在该函数中,您可以更改副本,但这不会更改main中的值。如果你想改变它,你需要使用指向指针的指针。
答案 2 :(得分:1)
如果描述问题的其他答案不充分 你想要的代码,你可以改变这些值
test(&ptr);
void test(int **tes){
int *temp2 = new int;
*tes =&temp2;
}
另外,不要乱用原始指针。 shared_ptr<>
和&
可以成为你的朋友!