社区
C语言
帖子详情
(*(void(*) ())0)() 是什么东东??
savagegan
2006-11-05 02:14:27
rt,个人觉得是一个“参数是函数指针void (*)(),返回值也是函数指针(* )()”的函数指针,但不理解中间那个“0”是什么意思……
请高手指教:)
...全文
1970
55
打赏
收藏
(*(void(*) ())0)() 是什么东东??
rt,个人觉得是一个“参数是函数指针void (*)(),返回值也是函数指针(* )()”的函数指针,但不理解中间那个“0”是什么意思…… 请高手指教:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
55 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
39457760
2006-11-07
打赏
举报
回复
楼主,下面的才是正解
你收获的那个仅仅是语法而已
回复人:Jim_King_2000() ( 三级(初级)) 信誉:100 2006-11-06 11:08:00
嵌入式系统的程序起始地址一般为0。这一点与PC不同。(PC程序的起始地址好像是FFFF0,这块地址是BIOS boot的所在地。)所以要在嵌入式系统中实现软件重启,就必须跳到地址0去执行。于是就有了上面的代码
康熙说编程
2006-11-06
打赏
举报
回复
大家来这里就是为了交流解决问题,不要拘泥于哪个板块,能解释问题就是对提问者的最大帮助。
tyc_2000_ren
2006-11-06
打赏
举报
回复
偶要 tyc2000@163.com 谢谢
Jim_King_2000
2006-11-06
打赏
举报
回复
嵌入式系统的程序起始地址一般为0。这一点与PC不同。(PC程序的起始地址好像是FFFF0,这块地址是BIOS boot的所在地。)所以要在嵌入式系统中实现软件重启,就必须跳到地址0去执行。于是就有了上面的代码。
做鸡真好吃
2006-11-06
打赏
举报
回复
路过学习~
wangye0823
2006-11-06
打赏
举报
回复
《C陷阱与缺陷〉
这本书有详细的解释
大家都不要吵了,
谁要看我发给他
wy3148@126.com
jiashao606
2006-11-06
打赏
举报
回复
C陷阱与缺陷第一章有解释
阿发伯
2006-11-06
打赏
举报
回复
前面打错了:
既然void (*)() == NULL == 0,那为什么不直接写0呢,就是因为void (*)()有"语义",
改为:
既然(void(*)())(0) == NULL == 0,那为什么不直接写0呢,就是因为(void(*)())(0)有"语义",
阿发伯
2006-11-06
打赏
举报
回复
因为楼主刚接触这种表示法,如果说得过深,反而有害,应该把最本质的东西告诉他.可能有人还会说,既然void (*)() == NULL == 0,那为什么不直接写0呢,就是因为void (*)()有"语义",这个语义是什么呢,就是说它代表无效的函数指针,就好比UINT就是unsigned int,DWORD就是unsigned long,语义不一样,本质是一样的.
Song
2006-11-06
打赏
举报
回复
((void *)0) 是一句没有意义的语句,一般编译器会把它去掉。
用法在ASSERT的定义中可以看到。如:
#ifdef _DEBUG
#define ASSERT ??? 如果定义了DEBUG,把ASSERT 定义为一个有意义的宏
#else
#define ASSERT ((void *)0) 否则,定义为((void *)0),这时编译器会忽略这条语句,相当 于ASSERT这一句完全不存在,不会对程序有任何影响
阿发伯
2006-11-06
打赏
举报
回复
NULL 和 0不一样.
NULL 是 ((void *)0) 是有语义的, 而0就是0
==================================================================================
我佩服你们的研究精神,"NULL 是 ((void *)0) 是有语义的"这句话不错,但本质还是一个0
angelleecash
2006-11-06
打赏
举报
回复
唉...
savagegan
2006-11-06
打赏
举报
回复
大家讨论的很热闹啊:P
我说说看了此贴后的收获:
此语句 = F()
F = (*f)
f = (A)0
A = void (*)()
就是0转成函数指针,该指针解引用得到改函数,对其调用。
是吧??
感谢某几位大哥的赐教和评论,让我见识不少:)
iamliadai
2006-11-06
打赏
举报
回复
《C陷阱与缺陷〉上有明确解释
====================
从哪里可以买到这本书啊
久仰大名了 。
iamliadai
2006-11-06
打赏
举报
回复
不同意楼上的,不能这样等同吧
0和null不一样
=====================================================================
NULL就是0
====================================================================
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
NULL 和 0不一样.
NULL 是 ((void *)0) 是有语义的, 而0就是0
pizisanmu
2006-11-06
打赏
举报
回复
是个函数.
0是变量名;变量类型*(void(*) ());void(*)()函数做参数,是一个地址;
拙见..
netxuning
2006-11-06
打赏
举报
回复
asouxuning@msn.com
太感谢了
xiongmao11000
2006-11-06
打赏
举报
回复
xiongmao11000@163.com 十分感谢
wildbeast123
2006-11-06
打赏
举报
回复
michael_jordan@126.com
谢谢
rotApple
2006-11-06
打赏
举报
回复
顶~
加载更多回复(35)
( *(
void
(*) ( ) ) 0 ) ( ) ; 到底是什么
东东
???!!!
( * (
void
(*) ( ) ) 0 ) ( ) ; 到底是什么?这个出自<<C陷阱与缺陷>> 这本书,可以下去搜索一下,我也是今天才看到这个例子,作为初学者,这个列子很好的带领我们重新回顾了指针的操作 也体现出指针的博大精深"也可以说为一种缺陷",因为他总是让人难理解(至少我目前这个阶段是这样) 这个语句的意思是 调用首地址为0位置的子例程 这个语句应...
void
* LP
VOID
是些什么
东东
1.什么是空指针,为何这样称呼它? 一般来说,程序的起始地址是从“代码区”的0地址开始存放的(注:如果插入一个内存分布图,则更能说明问题,此处省略),但实际上现代操作系统并非如此,却保留了从0开始的一块内存。至于这块内存到底有有多大,与具体的操作系统有关。如果程序试图访问这块内存,则系统提示异常。 为什么操作系统不是保留一个字节呢?由于内存管理是按页来进行的,因此无法做到单独保
void
*(*func) (
void
*)是啥意思?
有点怪怪的,因为以前搞c语言老是停留在打印个”hello world“那个初级阶段,现在用它搞IT项目,还真一时半会适应不过来,一看到这
东东
觉得忒别扭,怪怪的哈(小沈阳的口气,(*^__^*) )。
void
*(*func) (
void
*)是啥玩意儿呢?其实就是一个参数为
void
指针,返回值为
void
指针的函数指针了,仅此而已。fighting!
【c语言进阶】函数与指针有什么联系?函数指针又是什么
东东
?快来深入学习吧!
【c语言进阶】函数与指针有什么联系?函数指针又是什么
东东
?快来深入学习吧!
while (0) 是什么
东东
?
大家有见过 while (0) 的用法吗?是不是很奇怪,如果没见过,来看一下: /* Simple way to give quicklistEntry structs default values with one call. */ #define initEntry(e) \ do {
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章