免费注册 查看新帖 |

Chinaunix

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

[C] c语言编译器是怎么返回结构体的? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-06-05 13:54 |只看该作者
我做的都是返回指向结构的指针!

论坛徽章:
0
12 [报告]
发表于 2008-06-05 13:55 |只看该作者
可以返回结构体
编译器会把调用者用于接收返回值的结构体的指针当作参数传进去,被调用者实际上就直接操作了用于接收返回值的结构体。
当然这个对写程序的人是不可见的

[ 本帖最后由 zx_wing 于 2008-6-5 14:03 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2008-06-05 13:55 |只看该作者
函数返回结构体,是把整个结构烤备到stack上,然后把这块stack的指针传出来。

这是一种值传递,所以不建议传递很大的结构体。

论坛徽章:
0
14 [报告]
发表于 2008-06-05 13:59 |只看该作者
函数返回结构体,是把整个结构烤备到stack上,然后把这块stack的指针传出来。
这是一种值传递,所以不建议传递很大的结构体。

----------------那么在callee函数返回之后,Caller还会读取callee的栈空间?能不能写?

比如我这个代码,
main()
{
returnStruct().i=200;
}

我编译先

论坛徽章:
0
15 [报告]
发表于 2008-06-05 14:04 |只看该作者
returnStruct().i=200;不能通过编译,gcc报错是不合法的左值.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
16 [报告]
发表于 2008-06-05 14:05 |只看该作者
原帖由 naihe2010 于 2008-6-5 13:53 发表


瞎扯!

函数不返回结构体,怎么传递数据?

我记错了。

论坛徽章:
0
17 [报告]
发表于 2008-06-05 14:08 |只看该作者
结构体可以直接赋值的,所以函数可以直接返回,像返回整形之类的

论坛徽章:
0
18 [报告]
发表于 2008-06-05 14:08 |只看该作者
还是返回结构指针好些

论坛徽章:
0
19 [报告]
发表于 2008-06-05 14:18 |只看该作者
C的函数不能返回整个一个结构体, 只能返回结构体指针.
C++的函数可以返回整个一个类, 也可返回类的指针, 这是C++编译器背后做了工作.

不知支持C99的编译器是否支持C函数返回整个一个结构体???

论坛徽章:
0
20 [报告]
发表于 2008-06-05 14:21 |只看该作者
写c代码的风格一般是传一个结构体指针给函数,函数修改之,返回一个int值起errorcode的作用.

返回函数指针不是一个好的风格,因为用户要记得free.

不过我现在的问题是,假使我就是要返回结构体,编译器一般是怎么做的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP