指针的传址经常把我弄晕,今天遇到一道比较有意思的题目可以加深一下对指针传址的了解。
一般我们设置指针都习惯用*p表示,我们把 p 称为指针变量,p 里存储的内存地址处的内存称为 p 所指向的内存。
指针变量 p 里存储的任何数据都将被当作地址来处理。
题目:
{
#include <stdio.h>
int main()
int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;
r=p;
p=q;
q=r;
printf(" *p=%d\n *q=%d\n a=%d\n b=%d\n",*p,*q,a,b);
getch();//窗口保留函数,调试使用
return 0;
}
输出结果:
下面来分析一下这个函数:
#include <stdio.h>
int main()
{
int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;//这时*p=7,*q=8, p指向a的地址,q指向b的地址
r=p; //这时*p=7,*q=8,*r=7,r指向p也就是指向a的地址
p=q; //这时p指针被修改,指向了q也就是b的地址:*p=8,*q=8,*r=7
q=r; //这时q指针被修改,指向了 r也就是a的地址;*p=8,*q=7,*r=7
/*在这个过程中ab的值并没有改变,发生变化的是指针指向的地址*/
/*所以,a=7,b=8,*p=8,*q=7,*r=7*/
printf(" *p=%d\n *q=%d\n a=%d\n b=%d\n",*p,*q,a,b);
getch();//窗口保留函数,调试使用
return 0;
}
这个题的中心思想是:指针不变,但是指针的指向发生改变。