#include<stdio.h>
int main()
{
void swap(int a,int b);
int a,b;
scanf("%d %d",&a,&b);
swap(a,b);
printf("%d %d",a,b);
return 0;
}
void swap(int a,int b)
{
int t;
t=a;
a=b;
b=t;
}
为什么这个函数没有实现交换?而把printf函数放在swap函数里却可以实现交换。我在网上查,都说要用指针,不用指针不行吗?
#include<stdio.h>
int main()
{
void f(int a,int b,int c);
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
f(a,b,c);
printf("%d %d %d\n",a,b,c);
return 0;
}
void f(int a,int b,int c)
{
void swap(int *a,int *b);
if(a>b)
swap(&a,&b);
if(a>c)
swap(&a,&c);
if(b>c)
swap(&b,&c);
// printf("%d %d %d\n",a,b,c);
}
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
为什么这个函数也没实现排序?把printf函数放在f()函数中却可以实现。可能是我有误区,希望各位大侠帮帮小弟。在线等。
谢谢大家的详细解答!都是我的老师啊!再次不盛感谢!
不一定。
void swap(int a,int b)
{
int t;
t=a;
a=b;
b=t;
}
这样写,只是传了一份拷贝给a,b,交换好后,栈清空,没有传回给你原来所要交换的数。而printf放里面可以是因为你的那份拷贝(即a,b)的值是跟你要交换的数一样的,所以行得通。
不用指针的方法就是:
void swap(int &a,int &b)
{
int t;
t=a;
a=b;
b=t;
}
这样就可以了,这个传进去的是原先数据的地址,地址都改变了,值也就交换了。
关于指针与swap函数
1、用变量的指针交换,其实只是用指针名及指针运算符*访问变量 ,修改了变量的值。
int temp;
int *pa=&a;
int *pb=&b;
temp=*pa; *pa=*pb;*pb=temp;
2、用变量的引用交换,用”别名“访问变量
int temp;
int &aa=a;
int &bb=b;
temp=aa; aa=bb;bb=temp;
3、变量直接交换,用变量名访问变量,修改了变量的值
int temp;
int a=5;
int b=6;
temp=a; a=b; b=temp;
4、2的变形
int* temp;
int* pa=&a; int* pb=&b;
temp=pa; pa=pb;pb=temp;
cout<<*pa<<endls //-----指针交换了指向的地址,如果用*pa访问变量,此时就算是交换了,但是a和b没有交换。