交换a,b的值的程序

hznydx 2009-12-10 08:40:49
#include <stdio.h>

void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void main()
{
int a=3,b=5;
swap(a,b);
printf("a=%d,b=%d\n",a,b);
}

输出结果:a=5,b=3

问:将main()中的swap(a,b); 一句改为swap(&a,&b);时有错误,这是为什么呢。
&到底是怎么意义。
...全文
229 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
love330FE1 2009-12-12
  • 打赏
  • 举报
回复
& 是取地址符号
zaytsing 2009-12-12
  • 打赏
  • 举报
回复
感觉不对。。。还是我自己的拿出来吧。。main()也不是一样的。。

#include <stdio.h>
#include <stdlib.h>

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main(int argc, char *argv[])
{
int a=1,b=2;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
system("PAUSE");
return 0;
}
结果为a=2,b=1。。
zaytsing 2009-12-12
  • 打赏
  • 举报
回复
楼主那样是不行的,换不了的。。只能

#include <stdio.h>

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

void main()
{
int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
system("PAUSE");
}
构造方法只能以指针的为形参,void swap(int a,int b){}这样是换不了的。。不知道你是怎么换的。。我的编译器没反应。。只能以指针为参,变量地址为实参。。
drinker_linux 2009-12-12
  • 打赏
  • 举报
回复
学习了
liushiyuyi 2009-12-12
  • 打赏
  • 举报
回复
&表示取址,*表示取值
yueyucanyang 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hznydx 的回复:]
还有就是可不可以用指针来实现。不用&
[/Quote]

可以用指针来实现的
yueyucanyang 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hznydx 的回复:]
引用 12 楼 deng1243 的回复:
用指针:C/C++ code#include <stdio.h>void swap(int*a,int*b)
{int temp;
temp=*a;*a=*b;*b=temp;
}void main()
{int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}

不是说 引用必须被初始化,指针不必么?
swap(&a,&b); 怎么解释呢
[/Quote]

这个是作为函数参数,传参的时候就算是初始化了。
jernymy 2009-12-10
  • 打赏
  • 举报
回复

#include <stdio.h>

void swap1(int *a, int *b)
{
int tmp;

tmp = *a;
*a = *b;
*b = tmp;
}

void swap2(int *a, int *b)
{
*a = (*a) + (*b); // sum = a + b;
*b = (*a) - (*b); // b = sum - b; = a
*a = (*a) - (*b); // a = sum - b; = sum - a
}

void swap3(int *a, int *b)
{
*a = (*a) ^ (*b); // sum = a ^ b;
*b = (*a) ^ (*b);
*a = (*a) ^ (*b);
}

void swap4(int a[], int b[])
{
int tmp;

tmp = a[0];
a[0] = b[0];
b[0] = tmp;
}

int main(void)
{
int m = 5;
int n = 9;

printf("before swap data m: %d, n: %d\n", m, n);
swap1(&m, &n);
printf("after swap data m: %d, n: %d\n", m, n);
swap2(&m, &n);
printf("after swap data m: %d, n: %d\n", m, n);
swap3(&m, &n);
printf("after swap data m: %d, n: %d\n", m, n);
swap3(&m, &n);
printf("after swap data m: %d, n: %d\n", m, n);

return 0;
}

应该还有的,暂时没有想起来了
白头老汉 2009-12-10
  • 打赏
  • 举报
回复
c语言中没有引用吧,&b是取b的地址
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hznydx 的回复:]
引用 12 楼 deng1243 的回复:
用指针:C/C++ code#include <stdio.h>void swap(int*a,int*b)
{int temp;
temp=*a;*a=*b;*b=temp;
}void main()
{int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}

不是说 引用必须被初始化,指针不必么?
swap(&a,&b); 怎么解释呢
[/Quote]
这里没有在在借助中间指针变量,因此不存在初始化的问题。直接表示的就是a,b的地址.
如果是引用的话得这样:
int a = &b;
qqwx_1986 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hznydx 的回复:]
引用 12 楼 deng1243 的回复:
用指针:C/C++ code#include <stdio.h>void swap(int*a,int*b)
{int temp;
temp=*a;*a=*b;*b=temp;
}void main()
{int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}

不是说 引用必须被初始化,指针不必么?
swap(&a,&b); 怎么解释呢
[/Quote]
这是地址
hznydx 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 deng1243 的回复:]
用指针:C/C++ code#include<stdio.h>void swap(int*a,int*b)
{int temp;
temp=*a;*a=*b;*b=temp;
}void main()
{int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
[/Quote]
不是说 引用必须被初始化,指针不必么?
swap(&a,&b); 怎么解释呢
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hznydx 的回复:]
运行了一下,好像这样也可以:
#include <stdio.h>

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}



void main()
{
int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}


[/Quote]

这样就是所谓的传指针。
swap(&a,&b);这里分别是a,b的地址。
hznydx 2009-12-10
  • 打赏
  • 举报
回复
运行了一下,好像这样也可以:
#include <stdio.h>

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}


void main()
{
int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}

deng1243 2009-12-10
  • 打赏
  • 举报
回复
C++里的引用:

#include <stdio.h>

void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void main()
{
int a=3,b=5;
swap(a,b);
printf("a=%d,b=%d\n",a,b);
}
deng1243 2009-12-10
  • 打赏
  • 举报
回复
用指针:
#include <stdio.h> 

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

void main()
{
int a=3,b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qqwx_1986 的回复:]
引用 8 楼 kouwenlong 的回复:
引用 7 楼 hznydx 的回复:
还有就是可不可以用指针来实现。不用&

如果不用指针,那只能传引用,只能想你写的那样,否则没别的办法。

c中没有引用
[/Quote]
对,所以在C下只能穿指针了。
versaariel 2009-12-10
  • 打赏
  • 举报
回复
以前以为c里也有f(int&,int&),应该是c++的,学习了
qqwx_1986 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kouwenlong 的回复:]
引用 7 楼 hznydx 的回复:
还有就是可不可以用指针来实现。不用&

如果不用指针,那只能传引用,只能想你写的那样,否则没别的办法。
[/Quote]
c中没有引用
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hznydx 的回复:]
还有就是可不可以用指针来实现。不用&
[/Quote]
如果不用指针,那只能传引用,只能想你写的那样,否则没别的办法。
加载更多回复(7)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧