1.指针变量应该注意的事项:
①不能对未赋值的指针变量做指向运算
(原因是 指针p和q就相当于地址,需要将数值存放在地址里面,不能直接对地址赋值。)
②不使用“野指针”。(没有进行初始化的指针)
#include <stadio.h>
int main(){
int *p,*q;
*p=100;//(运行错误)
*q=10;//运行错误
printf("%d %d",*p,*q);
return 0;}
③不能用整数为一个指针变量赋值。
④如下
#include <stadio.h>
int main(){
int *p,*q;
p=0x10000;//运行错误
q=0x10004;//这也算野指针。
printf("%d %d",*p,*q);
return 0;}
2.实践项目
【程序阅读题】写出以下程序运行的结果,上机对照结果后,解释其过程。(注意用手画内存变化过程,而不要仅凭大脑思考。)
#include <stdio.h>
int main()
{
int *p1,*p2,*p;
int a=5,b=8;
p1=&a;
p2=&b;
if(a<b)
{
p=p1;
p1=p2;
p2=p;
}
printf("%d,%d\n",*p1,*p2);
printf("%d,%d\n",a,b);
return 0;
}
运行结果:
过程解释:
开始时p1存放a的地址;p2存放b的地址;
因为a<b,定义中间变量的指针p,用来交换p1和p2的地址,现在p1地址下的值即为b=8的值,而p2地址下存放的值为a=5;
但是a和b的值保持不变。