c语言 函数调用 swap函数 一定要用指针吗

#include<stdio.h>intmain(){voidswap(inta,intb);inta,b;scanf("%d%d",&a,&b);swap(a,b);p... #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()函数中却可以实现。可能是我有误区,希望各位大侠帮帮小弟。在线等。
谢谢大家的详细解答!都是我的老师啊!再次不盛感谢!
展开
 我来答
百度网友057ad1d
2011-07-26 · 超过15用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:29.8万
展开全部
主要是函数返回值的问题啊!普通函数只能返回一个值,而你要返回多个值,可用指针或者数组名作为形参!这与常规的不同,它从形参赋值给形参,给的只是一个地址,而实际上形参和实参指向的是同一个内存空间
函数void f(int a,int b,int c)之所以不能实现,是因为,你改变的只是形参的值,而实参没有改变,而你又不能直接返回这三个值,所以只能赋地址咯
改你就慢慢改了,多看看书上的基础
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有钱买不起房子
2011-07-26 · TA获得超过4326个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2082万
展开全部
c语言函数都是通过传值方式将实参传递给形参。至于这个值是数值还是内存地址,有很大区别
如果定义成swap(int a,int b),实际传递a、b的数值,不会更改其真实值的,因为在函数swap内交换的是a与b的复制品
如果定义成swap(int* a,int* b),实际传递&a和&b的真实地址,对地址上的值修改才能正确实现交换目的
直接写成下面代码,实现交换目的

#include<stdio.h>
int main()
{
int a,b;
void swap(int *a,int *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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫英落
2011-07-26 · TA获得超过234个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:80.3万
展开全部
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;
}
这样就可以了,这个传进去的是原先数据的地址,地址都改变了,值也就交换了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-26
展开全部
主函数通过参数传递将信息传递给子函数,而子函数对于传递来的参数做拷贝处理,就是在另外的一块存储区将传递进来的内容保存下载。这样你排列的是子函数存储区内的数据,而不是你主函数申请的数据区的数据。上面两个函数应该的形式应该是void swap(int *a,int *b);,void f(int *a,int*b,int*c);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-07-26 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4597万
展开全部
//两个函数都用指针。
#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);
}

void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式