c简单程序

来源:百度知道 编辑:UC知道 时间:2024/06/06 06:49:03
帮忙侃侃错在哪啊?
void swap(int *p1,int *p2);
main()
{
int a,b;
int *p1,*p2;
scanf("%d%d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
swap(p1,p2);
printf("%d,%d\n",a,b);
}

void swap(int *p1,int *p2)
{
int *temp;
*temp=*p1; /*此语句有问题*/
*p1=*p2;
*p2=*temp;
}

为什么把子函数改成这样就不出错了啊?
void swap(int *p1,int *p2)
{
int a;
int *temp=&a;
*temp=*p1; /*此语句有问题*/
*p1=*p2;
*p2=*temp;
}

temp需要一个初始值,你可以temp=0
实现的是P1和P2之间值的互换,所以temp的初始无所谓,但是要有的。

你没搞清楚什么是指针。

int *temp;
*temp=*p1;
temp没有指向任何东西,你对他用*操作肯定出错。

通常应该是这样写的:
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

int *temp;
因为temp是一个int类型的指针,所以他要指向一个变量
*temp是他所指向变量的值,int *temp=&a;*temp就是a的值,
如果没有那么它就是空的,访问他就是非法的。

你还要再熟悉下指针的用法哦

swap 1:temp是一个指针,*temp指temp所指区域的值,因为temp未初始化,*temp指向一个非法的地址。对非法的地址赋值,当然会出错。swap 2:*temp即为a,即a = *p1, *p1=*p2, *p2 =a。达到的交换。正确且合理的修改是:void swap(int *p1,int *p2) { int temp; temp=*p1; /*此语句有问题*/ *p1=*p2; *p2=temp; }