您好,欢迎来到外链网!
当前位置:外链网 » 站长资讯 » 专业问答 » 文章详细 订阅RssFeed

c语言定义swap函数,c+ swap函数

来源:互联网 浏览:69次 时间:2023-04-08

?

而以下两种是不能实现交换的:

void swap1(int a,int b)
{
? ? int temp;
? ? temp=a;
? ? a=b;
? ? b=temp;
}
void swap2(int *a,int *b)
{
? ? int *temp;
? ? temp=a;
? ? a=b;
? ? b=temp;
}

对于swap1,不能实现交换的理由是,C语言中函数的传的是形参,也就是一个副本,虽然在函数内体美国高防vps内交换了,但对真实的数据没影响。例如以下代码:

{
? ? ?int a=1,b=2;
? ? ?int ta=a,tb=b;
? ? ?int temp;
? ? ?temp=ta;
? ? ?ta=tb;
? ? ?tb=temp;
}
a和b并没有因此交换,交换的只是编译器自动生成的临时变量ta(形参)和tb。?

而对于swap2,执行过程如下代码:

{
?? ?int a=1,b=2;
?? ?int *ta=&a,*tb=&b;
?? ?int *temp;
?? ?temp=ta;
?? ?ta=tb;
?? ?tb=temp;
}
printf("a=%d,b=%d",a,b);
pirintf("a'=%d,b'=%d\n",*ta,*tb);可以看到交换了由副本指向的内容,但a,b内容不会变,即原本是ta指向a(ta = &a),tb指向b(tb = &b),交换后,变为ta指向b(ta = &b),tb指向a(tb = &a),相当于换一个指针变量指向a、b的地址,对a和b的值并无影响。

?

52220094