指针的传址经常把我弄晕,今天遇到一道比较有意思的题目可以加深一下对指针传址的了解。 一般我们设置指针都习惯用*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; }这个题的中心思想是:指针不变,但是指针的指向发生改变。