swap(int *p1,int *p2)
{int *temp;
*temp=*p1; //这句为什么不对?
*p1=*p2; //这句却是对的
*p2=temp;
}
-----------------
这个函数里面很混乱啊
*temp=*p1;这句没有不对,
只是在这里用法不对,
temp还没有分配内存空间.
------------------
把函数改成
swap(int *p1,int *p2)
{int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
就ok了,temp不需要int *型.
--------------------
如果你非要int *temp;
那么请这么改
swap(int *p1,int *p2)
{int *temp;
temp= (int*)malloc(4);//分配内存
*temp=*p1;
*p1=*p2;
*p2=*temp;
free(temp);//释放内存
}
temp是个指针,*temp是它指向的那个地址的数据。
开始temp还没有赋值,因此就没有*temp,所以*temp=*p1错误。
p1,p2都是函数参数,它们是有值的,因此*p1和*p2都存在。因此可以有*p1=*p2
int *temp;
*temp=*p1; //这句为什么不对?
因为int *temp指针还未指向一个合法内存地址,所以无法对其指向的内存单元进行赋值
而swap中的*p1显然在调用前应该已经付过了,
例如pointer_1=&a;
你还是指针概念没弄明白:指针是指向数据的,你定义后还没有告诉它指向谁怎么能给它赋值呢?