免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 俯卧撑
打印 上一主题 下一主题

新手,问个简单的问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-11-23 17:10 |只看该作者
原帖由 俯卧撑 于 2008-11-23 17:00 发表

我刚看了程序,我的代码还是c=scanf(...)
c=swap(a,b)的话,编译不通过,为什么不能返回值?
看来我得把概念好好再看看

swap的返回类型是void,表示它没有返回值

论坛徽章:
0
32 [报告]
发表于 2008-11-23 17:43 |只看该作者

哥们......
不知道咋说了真的
c是2的原因是你scanf里是俩个,就噶

论坛徽章:
0
33 [报告]
发表于 2008-11-23 19:59 |只看该作者
原帖由 wucaizhen 于 2008-11-23 17:43 发表

哥们......
不知道咋说了真的
c是2的原因是你scanf里是俩个,就噶

嗯,这个我猜想也是这样

论坛徽章:
0
34 [报告]
发表于 2008-11-23 20:26 |只看该作者
原帖由 tyc611 于 2008-11-23 17:10 发表

swap的返回类型是void,表示它没有返回值

我把void换成 int类型如何?我就是想看看swap到底做了什么,但既然是viod,c=swap可能就不合法了吧。我明白了实参是值传递,它相当于一个拷贝,a,b中的值并没改变,但我知道形参x和y的值应该是交换了,我想看看他们的结果要怎么做呢?我意思是不用指针和引用(这样a,b完全交换了),我想做到a,b还是原顺序输出敲进去的值,但形参交换过了的值也输出来,程序怎么修改?比如这样
#include <stdio.h>
void swap(int x,int y);
int main()
{
    int a,b,c;
    printf("请输入两个数:\n");
    scanf("%d,%d",&a,&b);
    c=swap(a,b);
    printf("%d,%d,%d",a,b,c);
    return 0;
}
void swap(int x,int y)
{
    int temp;
    temp=x;
    x=y;
    y=temp;
    retuen(x);
    retuen(y);
}

c=swap(a,b)  //这句就不合法了,还怎么解决这个问题呢?
我想敲进2和3,程序输出是
2 3  //实参
3 2  //形参交换后

[ 本帖最后由 俯卧撑 于 2008-11-23 20:39 编辑 ]

论坛徽章:
0
35 [报告]
发表于 2008-11-23 20:50 |只看该作者
原帖由 俯卧撑 于 2008-11-23 20:26 发表

我把void换成 int类型如何?我就是想看看swap到底做了什么,但既然是viod,c=swap可能就不合法了吧。我明白了实参是值传递,它相当于一个拷贝,a,b中的值并没改变,但我知道形参x和y的值应该是交换了,我想看 ...

我觉得你可以这样:
printf("%d, %d\n%d, %d", a, b, b, a);
另外不要swap了

论坛徽章:
0
36 [报告]
发表于 2008-11-24 21:11 |只看该作者

回复 #34 俯卧撑 的帖子

概念很不清晰阿。
函数在执行完以后最多只会有一个返回值 就是执行到的 return语句时返回的值
因为形参是自动变量所以在函数退出以后会消失
要实现你的目的 应该在swap里用printf把值打印出来

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
37 [报告]
发表于 2008-11-24 21:30 |只看该作者

回复 #34 俯卧撑 的帖子

真不知道你在想什么,都说了swap竟然返回的void类型,直接取值是不正确的做法。

你要是想看swap里发生了什么,就在swap里printf
void swap(int x, int y)
{
    int temp;
    printf("before swap, x is: %d, y is: %d",x, y);

    temp = x;
    x = y;
    y = temp;
    printf("after swap, x is: %d, y is: %d", x, y);
    //你现在的函数返回是void,竟然是void,表示无返回值,你在这里写return是什么意思?
}

你想返回一个值的话,可以这么写函数
int swap(int x, int y)
{
    ....
    return x;
    //你这里不要在return了,你再return也是没用的,程序在看见第一个return的时候,函数就返回了
}




你太缺乏思考了,你对论坛有依赖性。
你要对书上的语句,认真的看。看一遍不懂,接着看。要是一直看不懂,要不想接着看,那我倒觉得你不适合编程。忠告。
回你的帖子是在害你(边赚分边害你),但是我暂时有时间,就看你自己能不能认清了。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
38 [报告]
发表于 2008-11-26 08:29 |只看该作者
原帖由 zhonghan 于 2008-11-26 07:59 发表
比如是不是应该写成split(/\s++/,$var)?

论坛徽章:
0
39 [报告]
发表于 2008-11-26 09:27 |只看该作者
.............

论坛徽章:
0
40 [报告]
发表于 2008-11-26 09:37 |只看该作者
正解

#include <stdio.h>
extern void swap(int *x,int *y);
int main()
{
    int a,b;
    printf("请输入两个数:\n");
    scanf("%d,%d",&a,&b);
    swap(&a,&b);
    printf("%d,%d",a,b);
    return 0;
}
void swap(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP