为什么指针从函数返回其先前的值

时间:2011-05-03 22:06:41

标签: c++ pointers

伙伴们,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

3 个答案:

答案 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<>&可以成为你的朋友!