#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呀
3 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
你只是在swap里交换了送进来的两个指针的参数,这样并不能真正的交换值。
swap应该修改为:
void swap(int *a,int *b)
{
int t;
t=*a; *a=*b; *b=t;
}
一只斗牛犬
TA贡献1784条经验 获得超2个赞
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里面存储的地址没有变化。
守候你守候我
TA贡献1802条经验 获得超10个赞
函数在传递的时候,地址传递是不错,ab交换了,可是pq未改变,原因是abpq都是变量,有存储单元,但ap不是同一在存储单元,同理bq也不是,刚传递的时候,a和p指向i,当swap交换了ab,a就指向j,无关pq的事,pq的内容不变,指向就不变。通过函数调用来改变指针变量,很危险,我建议少用为好。如果要用,可以用函数返回值的方法改变。
- 3 回答
- 0 关注
- 852 浏览
添加回答
举报
0/150
提交
取消