指针变量赋初值疑问
#include<stdio.h>int swap(int *p1,int *p2)
{
int *p; /*第4行*/
p=p1; /*第5行*/
p1=p2; /*第6行*/
p2=p; /*第7行*/
}
main()
{
int *t1,*t2,a,b;
scanf("%d,%d",&a,&b);
getchar();
t1=&a;
t2=&b;
if (a<b)
{
swap(t1,t2);
}
printf("a=%d,b=%d\n",a,b);
getchar();
}
疑问:对于程序中所示的第4到第7行,教材上讲如果改成*p=*p1;*p1=*p2;*p2=*p;就会报错,说是指针变量p没有确定的地址,它的值是不可预见的,因而*p指向的单元也是不可预见的,对*p赋值可能会破坏系统的正常工作状态。我试了下,确实如此。为什么示例中同样是先定义*p也没有给p赋初值,而运行不会报错呢,难道是由于其后的三个不一样的赋值语句造成的。不明白!(这里定义p为指针变量不也是没有确定的地址吗)???