通过指针形参修改实参的值2

注意:图示使用的地址只是假设的,并不是真正的内存地址,只是说明原理

上次说到的是修改基本类型的变量,这次来说修改指针变量的值

#include <stdio.h>  

void change(int *a)
{
    int temp = 555;
    a = &temp;
}

int main()
{
    int i = 5;
    int *p = &i;

    printf("%p\n", p);

    change(p);//并没有修改成功p的值
    printf("%p\n", p);

    getchar();

    return 0;
}

ppp

原因还是和以往一样,函数只是改变了a的指向,并没有影响到p

1

既然p是一个变量,那么要改变它就要通过传递它的地址找到它,然后修改内存数据,修改程序为

#include <stdio.h>  

void change(int **a)
{
    int temp = 555;
    printf("%p\n", &temp);
    *a = &temp;
}

int main()
{
    int i = 5;
    int *p = &i;

    printf("%p\n", p);

    change(&p);
    printf("%p\n", p);

    getchar();

    return 0;
}

ppp

 

可以看到,成功改变了p的值,再看看内存的结构图,函数刚开始运行

1

修改了*a,就是修改了p的内容,修改完后p的地址是temp的,p也指向了temp

1

posted @ 2014-10-10 22:13  Mint tears  阅读(447)  评论(0编辑  收藏  举报