void 与 return 的矛盾(thinking in C++)

yumengshuyuan 2001-03-08 08:55:00
我在学习《C++编程思想》(thinking in C++)时经常发现有下段例子,
void* fetch(stash*s,int index){
if(index>=s->next||index<0)
return 0;
return &(s->storage[index*s->size]);}
问题是void 不是已规定不让代回任何值,
可为何还用return 返回函数地址?
...全文
275 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yumengshuyuan 2001-03-09
  • 打赏
  • 举报
回复
我懂了,
谢了。
upyu 2001-03-08
  • 打赏
  • 举报
回复
这里我看过,我们不知道指针*stroage所指直的类型,所以用void表示,即void这里不表示不返回值,表示不确定的指针。"if(index>=s->next||index<0)return 0;"表示索引index不再数组范围内。&(s->storage[index*s->size])是取第index*s->size得值得地址。我可能说的不清楚,书上讲的很详细。
holyfire 2001-03-08
  • 打赏
  • 举报
回复
返回的是void型的指针,指针的内容是0或者s->storage[index*s->size]
函数的意思是可以通过内容是否为0来判断有无结果。
holyfire 2001-03-08
  • 打赏
  • 举报
回复
返回的是void型的指针,指针的内容是0或者s->storage[index*s->size]
函数的意思是可以通过内容是否为0来判断有无结果。
xuii 2001-03-08
  • 打赏
  • 举报
回复
return 返回的值如果是int那么放在ax 或者Eax 如果是结构那么eax放的是指向这个结构的指针!
所以ruturn语句和void实际上并不矛盾!
建议你使用汇编级的调试工具跟踪一次!就知道了!
yumengshuyuan 2001-03-08
  • 打赏
  • 举报
回复
易水,
我如何给你加分呀?
我是说过程,
我刚来不知怎样给别人加分,
点击哪个键?
yumengshuyuan 2001-03-08
  • 打赏
  • 举报
回复
那此处返回的是什么呢?
Areslee 2001-03-08
  • 打赏
  • 举报
回复
该函数的返回值是一个无类型的指针!
void*表示一个无类型指针 void 才是无返回值
tinydrop 2001-03-08
  • 打赏
  • 举报
回复
这里void *可以看成一种基本数据类型,就像(int *)、(float *)等.但c/c++中不把它们说成是基本类型.
这里顺便说一下,对于返回void的函数也不是说函数没有返回值,只是这里的返回值不能由你指定,而由系统提供。如果你是用windows可以用GetExitCodeProcess或GetExitCodeThread函数获得返回值(一般情况时,当函数正常对出返回值是0,而其他情况是非0)。
luodi 2001-03-08
  • 打赏
  • 举报
回复
建议你去看一下标准C运行库中 malloc的输出定义! 返回值为 void *其实表明的是你可以将它cast成任何你想要的指计类型!void 确实是无返回的意思,但void*恰恰表明任何指计类型的意思!你说的书我没看过,你应该可以从书中的上下文中猜测它想要的结果是用来case(造型)成什么。

70,039

社区成员

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

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