void 类型的函数 return;有返回什么吗?

善良超锅锅 2011-12-07 11:14:38
今天在《C语言深度剖析》上看到这个问题,我不能肯定。

return的作用是结束一个函数并返回后面跟着的值,但void类型的函数return是不是只有结束函数的作用?

return;真的没返回什么吗?
...全文
3195 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
强制结束函数而已,返回到调用此函数的地方
pengzhixi 2011-12-07
  • 打赏
  • 举报
回复
return;就是没返回任何值。
狂且 2011-12-07
  • 打赏
  • 举报
回复
木有返回. 所以加 return; 和不加 木有区别.
hzylh 2011-12-07
  • 打赏
  • 举报
回复
没有返回值。。。
机智的呆呆 2011-12-07
  • 打赏
  • 举报
回复
从语义上来讲木有。
Arnold9009 2011-12-07
  • 打赏
  • 举报
回复
这个真没有

void函数,在函数结束的时候,其实是隐含执行return的
奋斗小青年 2011-12-07
  • 打赏
  • 举报
回复
楼主这个真么有,只是说明函数退出了
善良超锅锅 2011-12-07
  • 打赏
  • 举报
回复
那这本书上提这个问题干啥?搞的我草木皆兵
nickowen 2011-12-07
  • 打赏
  • 举报
回复
和你预期的一样
AIGPTchina 2011-12-07
  • 打赏
  • 举报
回复
真的没返回值,就是结束函数。
duke56 2011-12-07
  • 打赏
  • 举报
回复
只是返回调用该函数的地方继续执行代码
善良超锅锅 2011-12-07
  • 打赏
  • 举报
回复
这个真是贴中贴!
如果你尝试访问返回的地此,肯定会出错
[Quote=引用 12 楼 xhz2000 的回复:]

看你说到return了 我也提一个问题 也是《C语言深度解剖》里面的 他说return不能返回指向“栈内存”的指针 因为该内存在函数体结束时被销毁~~

#include<stdio.h>

char *func(void)
{
char str[30] = {0};
return str;
}
int main(void)
{
printf("%p\n", func())……
[/Quote]
赵4老师 2011-12-07
  • 打赏
  • 举报
回复 1
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
猪头小哥 2011-12-07
  • 打赏
  • 举报
回复
也就是说这么用会存在潜在危险 出错的就是随机的 当程序很大 需要内存很多的时候 是吧

[Quote=引用 17 楼 pqpqr 的回复:]

你返回的是函数内分配的“栈内存”,函数结束后,str所指向的内存会被系统回收,
str就变成野指针了。你输出正确只能说明被释放的那块内存还没有被使用。
引用 16 楼 zhutou100hao 的回复:
那是野指针了 就一定会有错误啦~~

引用 14 楼 xhz2000 的回复:

char *func(void)
{
char str[30] = {0};
return ……
[/Quote]
  • 打赏
  • 举报
回复
你返回的是函数内分配的“栈内存”,函数结束后,str所指向的内存会被系统回收,
str就变成野指针了。你输出正确只能说明被释放的那块内存还没有被使用。
[Quote=引用 16 楼 zhutou100hao 的回复:]
那是野指针了 就一定会有错误啦~~

引用 14 楼 xhz2000 的回复:

char *func(void)
{
char str[30] = {0};
return str;
}

函数结束后char str[30] = {0}; 这个已经出栈了! 你说会是野指针吗?
[/Quote]
猪头小哥 2011-12-07
  • 打赏
  • 举报
回复
那是野指针了 就一定会有错误啦~~
[Quote=引用 14 楼 xhz2000 的回复:]

char *func(void)
{
char str[30] = {0};
return str;
}

函数结束后char str[30] = {0}; 这个已经出栈了! 你说会是野指针吗?
[/Quote]
yah606060 2011-12-07
  • 打赏
  • 举报
回复
在汇编里面应该就是一个 ret 指令 貌似 更新程序计数器
xhz2000 2011-12-07
  • 打赏
  • 举报
回复
char *func(void)
{
char str[30] = {0};
return str;
}

函数结束后char str[30] = {0}; 这个已经出栈了! 你说会是野指针吗?


猪头小哥 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xhz2000 的回复:]

看你说到return了 我也提一个问题 也是《C语言深度解剖》里面的 他说return不能返回指向“栈内存”的指针 因为该内存在函数体结束时被销毁~~

#include<stdio.h>

char *func(void)
{
char str[30] = {0};
return str;
}
int main(void)
{
printf("%p\n", func())……
[/Quote]
数组的内存空间是系统自动分配的,怎么会有野指针?再说我也初始化了~
xhz2000 2011-12-07
  • 打赏
  • 举报
回复
看你说到return了 我也提一个问题 也是《C语言深度解剖》里面的 他说return不能返回指向“栈内存”的指针 因为该内存在函数体结束时被销毁~~

#include<stdio.h>

char *func(void)
{
char str[30] = {0};
return str;
}
int main(void)
{
printf("%p\n", func());
}
这是哪个例子 我运行时也没出现什么问题,求解释~~

这个应该是个野指针了! 没有问题! 只是你这个栈指针还没有被另一个函数使用到而已,

应该会造成不确定的错误!
加载更多回复(1)

70,011

社区成员

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

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