注意:图示使用的地址只是假设的,并不是真正的内存地址,只是说明原理
上次说到的是修改基本类型的变量,这次来说修改指针变量的值
#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; }
原因还是和以往一样,函数只是改变了a的指向,并没有影响到p
既然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; }
可以看到,成功改变了p的值,再看看内存的结构图,函数刚开始运行
修改了*a,就是修改了p的内容,修改完后p的地址是temp的,p也指向了temp
原文:http://www.cnblogs.com/acgpiano/p/4017964.html