如果自定义一个函数,没有任何返回值,而形参是一个指针传入这个函数,在这个函数中,无论如何改变指针所指的方向,函数结束后对外部数据没有变化,唯独通过指针,来间接改变函数以外的变量的值(例如令*p = 一个新的值)。那么此时此刻,在内存中p的地址里的数据已经改变,而函数结束后,该函数对外部做出的贡献就是把原来p的地址里的数据改变了,其他都没变,包括p指针所指的地址。
#include<stdio.h>
void change1(int *y)
{
int c = 1000;
y = &c;
};
void change2(int *y)
{
int c = 20;
*y = c;//通过指针间接修改原来y所指的值
};
void main()
{
int a = 3;
int *b = &a;
printf("%d\n",a);
printf("%d\n",*b);
printf("%d\n",b);
change1(b);
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",*b);
change2(b);
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",*b);
}
输出结果
3
3
1703740
3
1703740
3
20
1703740
20
Press any key to continue
无论经过多少外部函数,指针b的地址在main()中始终没变,而在change2函数中通过b指针把a的值修改了