指针变量作的赋值问题

2024-12-03 15:52:30
推荐回答(4个)
回答1:

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);//释放内存
}

回答2:

temp是个指针,*temp是它指向的那个地址的数据。
开始temp还没有赋值,因此就没有*temp,所以*temp=*p1错误。
p1,p2都是函数参数,它们是有值的,因此*p1和*p2都存在。因此可以有*p1=*p2

回答3:

int *temp;
*temp=*p1; //这句为什么不对?
因为int *temp指针还未指向一个合法内存地址,所以无法对其指向的内存单元进行赋值

而swap中的*p1显然在调用前应该已经付过了,
例如pointer_1=&a;

回答4:

你还是指针概念没弄明白:指针是指向数据的,你定义后还没有告诉它指向谁怎么能给它赋值呢?