为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

DIEA 2019-02-06 10:06:20
#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;
}

查看完整回答
反对 回复 2019-03-22
?
一只斗牛犬

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里面存储的地址没有变化。



查看完整回答
反对 回复 2019-03-22
?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-03-22
  • 3 回答
  • 0 关注
  • 852 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信