BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


[已解决]函数返回一结构体后访问结构体内部成员 没有出错 why
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
zhuhefang2006
精灵王




UID:605433
注册:2007-8-20
最后登录: 2008-10-08
帖子:253
精华:0

可用积分:341 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


1楼 发表于 2008-7-8 13:24 
测试代码如下:

#include <stdio.h>

struct point
{
        int x;
        int y;
};

struct point makepoint(int x, int y)
{
        struct point temp;
        temp.x = x;
        temp.y = y;
        return temp;
}

int main(void)
{
        printf("Point.x = %d   Point.y = %d\n", makepoint(2,3).x, makepoint(2,3).y);
        return 0;
}

makepoint()函数返回后,temp变量的内存空间已经释放,为什么访问temp内部的成员变量x,y 没有出错呢?

[ 本帖最后由 zhuhefang2006 于 2008-7-9 01:01 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
scutan   帅哥 (冬日夜雨)
精灵使
Linux newbie


CU奥运火炬传递手2008
UID:551201
注册:2007-4-13
最后登录: 2008-10-08
帖子:4849
精华:10

可用积分:4467 (小富即安)
信誉积分:345
专家积分:769 (本版:352)
空间积分:815
推广积分:203

来自:成都
状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2008-7-8 13:26 
C语言规定可以将结构体的整体作为函数的返回值。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

全力以赴每一秒!
勿在浮砂筑高台!

积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
版主 cugb_cat   帅哥
广告杀手-大法师


CU奥运火炬传递手2008
UID:342049
注册:2005-11-27
最后登录: 2008-10-07
帖子:9738
精华:6

可用积分:9421 (腰缠万贯)
信誉积分:110
专家积分:434 (本版:115)
空间积分:0
推广积分:10

来自:北京海淀中关村
状态:...保密...

[个人空间] [短信] [博客]


3楼 发表于 2008-7-8 13:26 
如果是return 一个int型的,你认为会出错吗?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

欢迎访问ToFree社区
www.tofree.org

积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
scutan   帅哥 (冬日夜雨)
精灵使
Linux newbie


CU奥运火炬传递手2008
UID:551201
注册:2007-4-13
最后登录: 2008-10-08
帖子:4849
精华:10

可用积分:4467 (小富即安)
信誉积分:345
专家积分:769 (本版:352)
空间积分:815
推广积分:203

来自:成都
状态:...离线...

[个人空间] [短信] [博客]


4楼 发表于 2008-7-8 13:27 



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

全力以赴每一秒!
勿在浮砂筑高台!

积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
chbc88
侠客




UID:727003
注册:2008-7-7
最后登录: 2008-07-11
帖子:30
精华:0

可用积分:47 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2008-7-8 13:28 
函数最好不要直接返回结构体,效率低。



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
system888net   帅哥
天使




UID:304970
注册:2005-8-21
最后登录: 2008-10-07
帖子:1265
精华:1

可用积分:3166 (小富即安)
信誉积分:100
专家积分:140 (本版:50)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2008-7-8 13:28 
回复 #1 zhuhefang2006 的帖子

这是C的表面化说法,看看编译器的实质说法: gcc -S



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
Godbach (To be 千里马!)
精灵使


CU奥运火炬传递手2008
UID:534931
注册:2007-3-9
最后登录: 2008-10-07
帖子:4257
精华:4

可用积分:7750 (富足长乐)
信誉积分:105
专家积分:69 (本版:1)
空间积分:2
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


7楼 发表于 2008-7-8 13:39 
makepoint()函数返回后,temp变量的内存空间已经释放,为什么访问temp内部的成员变量x,y 没有出错呢?


这样理解是不对的



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
5毛党党员
大天使



UID:677490
注册:2008-3-17
最后登录: 2008-10-08
帖子:2360
精华:0

可用积分:1537 (家境小康)
信誉积分:10
专家积分:47 (本版:32)
空间积分:0
推广积分:0

状态:...在线...

[个人空间] [短信] [博客]


8楼 发表于 2008-7-8 13:49 
return 返回的是结构本身。

在main函数里得到的是结构的一个副本。

这么做的缺点就是浪费内存



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
henry3695   帅哥
侠客



UID:65366
注册:2003-6-23
最后登录: 2008-08-13
帖子:33
精华:0

可用积分:16 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


9楼 发表于 2008-7-8 13:51 
返回的时候调用了结构的拷贝构造函数



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
scutan   帅哥 (冬日夜雨)
精灵使
Linux newbie


CU奥运火炬传递手2008
UID:551201
注册:2007-4-13
最后登录: 2008-10-08
帖子:4849
精华:10

可用积分:4467 (小富即安)
信誉积分:345
专家积分:769 (本版:352)
空间积分:815
推广积分:203

来自:成都
状态:...离线...

[个人空间] [短信] [博客]


10楼 发表于 2008-7-8 13:52 
回复 #8 5毛党党员 的帖子

其实主要还是时间上的浪费。所以C++的函数参数中引入了引用的方式。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

全力以赴每一秒!
勿在浮砂筑高台!

积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 1.711871 second(s), 4 queries , Gzip enabled