一个C语言swap函数,表示不解?

#include<stdio.h>
void swap(int *a,int *b)
{ int *t;
t=a; a=b; b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf("%d %d\n",*p,*q);
}

结果是3 5
我觉得p和q换了地址,应该是5 3呀

DIEA
浏览 814回答 3
3回答

慕田峪4524236

你只是在swap里交换了送进来的两个指针的参数,这样并不能真正的交换值。swap应该修改为:void swap(int *a,int *b){int t;t=*a; *a=*b; *b=t;}

一只斗牛犬

void fun(int *a,int *b){int *c;c=a;c=b;b=c;} 这个函数实际上什么都没有做。形参 a,b中存的地址互换。只做这些没有任何意义。地址传递也是“传递”,fun(p,q) 就是 a=p;b=q ,然后,函数里面 a<=>b p 与q里面存储的地址没有变化。

守候你守候我

函数在传递的时候,地址传递是不错,ab交换了,可是pq未改变,原因是abpq都是变量,有存储单元,但ap不是同一在存储单元,同理bq也不是,刚传递的时候,a和p指向i,当swap交换了ab,a就指向j,无关pq的事,pq的内容不变,指向就不变。通过函数调用来改变指针变量,很危险,我建议少用为好。如果要用,可以用函数返回值的方法改变。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Maya