首页 > 其他 > 详细

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

时间:2014-10-10 23:34:46      阅读:426      评论:0      收藏:0      [点我收藏+]

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

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

#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;
}

bubuko.com,布布扣

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

bubuko.com,布布扣

既然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;
}

bubuko.com,布布扣

 

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

原文:http://www.cnblogs.com/acgpiano/p/4017964.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!