免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2009-04-29 23:19 |只看该作者
回楼上的,应该修改一下func函数才对。。^_^

论坛徽章:
0
12 [报告]
发表于 2009-04-30 09:13 |只看该作者

回复 #1 handsome-king 的帖子

顶起来,挺想知道答案的!
高手解答下!

论坛徽章:
0
13 [报告]
发表于 2009-04-30 09:33 |只看该作者

回复 #1 handsome-king 的帖子

用char*传进去的参数只能修改指针指向的内容,不能修改指针本身。正确的代码如下:

  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>

  4. char *func()
  5. {
  6.        char *aa= "asdfasdf";
  7.        return aa;
  8. }

  9. int  func1( char *bb )
  10. {
  11.       char* xx = func();
  12.       strcpy(bb,xx);
  13.       printf( "func1:[%s]\n", bb );  
  14.       return 0;
  15. }

  16. int main( )
  17. {
  18.        char cc[20];
  19.        func1( cc );
  20.        printf(  "main:[%s]\n", cc );
  21.         return 0;
  22. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2009-04-30 09:44 |只看该作者
哦,知道了。感谢回帖的朋友。^_^

[ 本帖最后由 handsome-king 于 2009-4-30 10:16 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-04-30 10:00 |只看该作者
这么解释吧,这里涉及3个char*,aa,bb,cc
首先是aa,在func函数中char *aa="asdfasdf";让aa指向一个字符串,同时将这个串的地址返回
其次是bb,在func1中bb=func();让bb指向了刚才申请的字符串空间,这样输出bb就能得到字符串"asdfasdf"的值
最后是cc,cc在这个程序中是不改变的,因为执行func1( cc );此时就把cc指向的地址传入了func1调用的形参中,换句话说执行了一句bb=cc,但是此时不管你怎么操作你改变的都是func1在调用时申请的变量bb的值,却无法涉及cc值的改变。

论坛徽章:
0
16 [报告]
发表于 2009-04-30 10:35 |只看该作者
但是此时不管你怎么操作你改变的都是func1在调用时申请的变量bb的值,却无法涉及cc值的改变


我对bb用strcpy不就改变了cc的值了么?

论坛徽章:
0
17 [报告]
发表于 2009-04-30 10:44 |只看该作者
strcpy的实现大概是这样的
strcpy(char* s,char* t)
{
while (*s++=*t++);
}
你如果进行strcpy只是传给了bb,但是cc依然指向原来的地址没变
你可以试试看看调试一下查看他们指向的地址就明白了

论坛徽章:
0
18 [报告]
发表于 2009-04-30 10:46 |只看该作者
你对bb进行strcpy只是让bb指向了一块新的内存,但是cc并未被如此操作,所以cc的值还是申请cc时候指向的

论坛徽章:
0
19 [报告]
发表于 2009-04-30 11:11 |只看该作者
char *aa=asdfasdf"; 局部变量

在函数推出后,值是不确定的

论坛徽章:
0
20 [报告]
发表于 2009-04-30 11:13 |只看该作者
如果我把func1()里面的bb=func()改成strcpy(cc, bb),那cc的值就改变了,main()里面的printf就能打印出cc里面的值,也就是那个串。
而并不是所说的在func1()里面不管做什么操作只会改变bb的值,而不会改变cc的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP