首页 > 代码库 > 通过指针形参修改实参的值2

通过指针形参修改实参的值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

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