c语言中的指针问题,以及子函数的调用
c语言中的指针问题,以及子函数的调用调用函数两个voidswap2(int*p1int*p2){intt;t=*p1;*p1=*p2;*p2=t;}voidswap2(i...
c语言中的指针问题,以及子函数的调用调用函数两个
void swap2(int *p1 int*p2)
{
int t;
t=*p1;*p1=*p2;*p2=t;
}
void swap2(int *p1 int*p2)
{
int *t;
t=p1;p1=p2;p2=t;
}
我想问,为什么第一个是对的?第二个里面不应该是在交换地址吗?求大神教一下 展开
void swap2(int *p1 int*p2)
{
int t;
t=*p1;*p1=*p2;*p2=t;
}
void swap2(int *p1 int*p2)
{
int *t;
t=p1;p1=p2;p2=t;
}
我想问,为什么第一个是对的?第二个里面不应该是在交换地址吗?求大神教一下 展开
展开全部
第一个是在根据指针, 交换指针所指的数据
第二个虽然写的使用"指针"在实现, 实际上, 他是在奖p1 和p2两个本地的变量值进行交换, 而并不是奖两个地址所指向的内存单元进行交换
第二个函数你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在干嘛了
第二个虽然写的使用"指针"在实现, 实际上, 他是在奖p1 和p2两个本地的变量值进行交换, 而并不是奖两个地址所指向的内存单元进行交换
第二个函数你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在干嘛了
更多追问追答
追问
不是说定义了指针以后,p1,p2 就表示地址了吗?
追答
对, p1和p2确实是指针, 但是要注意, p1,p2在swap函数中, 本身就是一个本地变量, 他们指向的值(或者内存单元)是可以"引用过来的, 但是p1,p2这两个地址, 跟int, char, long等一样, 是拷贝过来的
2016-11-28
展开全部
你的理解没有错,但问题在于,作为函数的参数为指针参数,也就是说作为指针类型而言,参数是按值进行传递,不会因为函数内部对指针进行了交换而发生改变。因此,第一个函数采用指针单元内的值进行交换,两个指针的内部值在外部是能反映出来,第二个函数在外部是反映不出来的。
追问
也就是在指针类型的参数传递中函数内部交换指针所指的值可以传递,但是指针本身交换就不可以传递?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询