码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-11 00:43:35      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   使用   ar   数据   sp   

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

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

#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

标签:style   blog   http   color   io   使用   ar   数据   sp   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!