免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 26763 | 回复: 21
打印 上一主题 下一主题

[C] 请教一个基础的函数返回值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-29 21:41 |只看该作者 |倒序浏览
#include <stdlib.h>

char *func()
{
       char *aa=asdfasdf";
      
       return aa;
}
int  func1( char *bb )
{
      bb=func();                                 //strcpy(bb,"adafsfas");
      printf( "func1:[%s]\n", bb );  
      return 0;
}
void main( )
{
       char cc[20];
       func1( cc );
       printf(  "main:[%s]\n", cc );
}

得到的结果:
func1[asdfasdf]
main:[?9]

我的问题是为什么bb的值不能传递回给cc呢?

[ 本帖最后由 handsome-king 于 2009-4-29 23:20 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-29 21:49 |只看该作者
你这个bb=func1();是不是写错了
应该是bb=func()吧,按照你的意思。
你用下面的代码应该OK:

  1. char *func()
  2. {
  3.        char* aa = new char[20];
  4.        strcpy( aa, "asdfasdf" )
  5.        return aa;
  6. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-04-29 21:51 |只看该作者
不好意思,笔误。。-_-!!!!
C++就搞不清楚了^_^

论坛徽章:
0
4 [报告]
发表于 2009-04-29 21:52 |只看该作者
呵呵,你这明显还是C风格。

论坛徽章:
0
5 [报告]
发表于 2009-04-29 22:00 |只看该作者
嗯,是呀。。谢谢你。^_^
我就觉得是不是函数返回值跟参数传递的区别的问题。

论坛徽章:
0
6 [报告]
发表于 2009-04-29 22:14 |只看该作者
char *func(char *aa)
{
       strcpy(aa, "asdfasdf")
       return aa;
}
int  func1( char *bb )
{
     func( bb);                                 //strcpy(bb,"adafsfas");
      printf( "func1:[%s]\n", bb );  
      return 0;
}

==========================
C语言基础语法问题 建议翻书

论坛徽章:
0
7 [报告]
发表于 2009-04-29 22:18 |只看该作者
LS的朋友,你可以选择不回答。我也觉得是基础,但是就是不明白啊

论坛徽章:
0
8 [报告]
发表于 2009-04-29 22:22 |只看该作者
原帖由 handsome-king 于 2009-4-29 22:00 发表
嗯,是呀。。谢谢你。^_^
我就觉得是不是函数返回值跟参数传递的区别的问题。

是啊, 传的是cc的副本 不会改cc本身的值

论坛徽章:
0
9 [报告]
发表于 2009-04-29 22:26 |只看该作者
LS的意思是func1(cc)传递的是cc的副本?那为什么我在func1里面对bb的赋值改成strcpy,而不是用函数赋值就可以传回给cc呢?

论坛徽章:
0
10 [报告]
发表于 2009-04-29 22:51 |只看该作者
原帖由 handsome-king 于 2009-4-29 22:26 发表
LS的意思是func1(cc)传递的是cc的副本?那为什么我在func1里面对bb的赋值改成strcpy,而不是用函数赋值就可以传回给cc呢?

你的程序你确认是你所说的结果?

我这里的输出:
[root@myfedora c]# !gcc
gcc 2.c
2.c: In function &iexcl;&reg;func&iexcl;&macr;:
2.c:9: warning: function returns address of local variable
2.c: In function &iexcl;&reg;main&iexcl;&macr;:
2.c:18: warning: return type of &iexcl;&reg;main&iexcl;&macr; is not &iexcl;&reg;int&iexcl;&macr;
[root@myfedora c]# ./a.out
func1:[L]
main:[?9]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP