C语言中,这个用指针交换a,b的程序哪里错了?

来源:百度知道 编辑:UC知道 时间:2024/09/28 12:16:20
main()
{int a,b,*p;
scanf("%d,%d",&a,&b);
if(a<b)
{p= &a;&a=&b;&b=p; } /*指针不就是地址吗,这样写错了吗*/
printf("a=%d,b=%d\n",a,b);

}
正确程序好下:
main()
{int a,b,*p,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{p= p1;p1=p2;p2=p; }
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}

/*你在陈程序中把一个类型的指针和这种类型的变量的地址理解为同一种类型,可以相互赋值。这是不正确的。
可以用变量的地址给指针赋值,但是一般在变量定义后不能修改变量的地址,即不能对变量的首地址赋值。*/
#include<stdio.h>
void main()
{int a,b,*p;
scanf("%d,%d",&a,&b);
if(a<b)
{
p= &a;//这条语句合法,可以用变量的地址给指针赋值
&a=&b;//不合法,变量的地址不能被修改
&b=p; //不合法,变量的地址不能被修改
}
printf("a=%d,b=%d\n",a,b);

}

main()
{int a,b,*p,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a; //可以用变量的地址给指针赋值,但反过来不行
p2=&b;
if(a<b)
{
p= p1;
p1=p2;
p2=p;
} //p,p1,p2是相同的类型,即都是指针,可以相互赋值
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}

&a=&b;&b=p;
&a是一个地址没错,可是它是一个常量,不可以再给它赋值的,而p=&a之后因为p是一个变量,所以可以随便再指向其他地址

&a这是取a的地址值,是个值(常量),不是变量,不能作为左值(即不能在赋值号左边出现)不能&a=&b赋值,就相当于不能给常数3赋值,如3=5,这个赋值表达式就是错误的。

地址怎么赋值?p= &a这是对的,&a=&b;&b=p;不对,地址怎么赋值给地址呀。。。