好久没有问问题,今天来一个!

goodluck10660 2003-03-29 10:15:43
例1:
Date Date::operator+(int days)
{
Date temp;
...
return temp;

}

例2:
char * myFunc()
{
char lpszBuffer[100];
strcpy(lpszBuffer,"this is a text");
return lpszBuffer;
}

为什么例1可以而例2不行(一个是返回值,一个返回地址),两者有什么
本质区别呢?
...全文
19 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cenlmmx 2003-03-29
  • 打赏
  • 举报
回复
例1:
Date Date::operator+(int days)
{
Date temp;
...
return temp;

}

return后系统创建一个临时对象保存用于返回.所以可以.

例2:
char * myFunc()
{
char lpszBuffer[100];
strcpy(lpszBuffer,"this is a text");
return lpszBuffer;
}

在这儿只是返回一个字符指针,外面可以得到这个指针,关键在于这个指针所指向的地址空间已经被析构.所以得到这样的指针是没有意义的.
ghdut 2003-03-29
  • 打赏
  • 举报
回复
例2:
char * myFunc()
{
char lpszBuffer[100];
strcpy(lpszBuffer,"this is a text");
return lpszBuffer;
}
你的这个返回值,没有意义。因为,lpszBuffer的生存期,
等你把{ }结束后,lpszBuffer就死亡了,没有了,你返回的
地址不存在了,所以,你这样做很危险!!
Windmoon_hz 2003-03-29
  • 打赏
  • 举报
回复
返回值的话,就可以用变量纪录这个值了
而返回指针后,lpszBuffer[100]的空间被释放,返回后,返回的指针指的地方是空的。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧