一句费解的C代码
最近在研究一个项目的代码,发现其中有这么一句:DMA0DA=(void (*)())&UCA1TXBUF;
什么意思?大神们帮帮忙! 强制转换成一个函数指针 (void (*)()) 函数指针&UCA1TXBUF 地址
合起来就是将后面的地址强制转换为函数指针,然后赋值给左边变量。
楼上正解!!! techbaby 发表于 2013-11-6 15:12 static/image/common/back.gif
(void (*)()) 函数指针&UCA1TXBUF 地址
合起来就是将后面的地址强制转换为函数指针,然后赋值给左边变 ...
谢谢指点。
但是,为什么要转换为函数指针,直接转换成指针不行吗,像这样:
DMA0DA=(void *)&UCA1TXBUF; 如果DMA0DA是一个函数指针,那么赋值就要求是一个相同类型函数的地址,(void *)类型不匹配。 techbaby 发表于 2013-11-6 15:39 static/image/common/back.gif
如果DMA0DA是一个函数指针,那么赋值就要求是一个相同类型函数的地址,(void *)类型不匹配。 ...
真是高手,多谢指点!
刚才看了一下相关代码定义,发现如下:
typedef void (* __SFR_FARPTR)();
#define SFR_20BIT(address) extern __SFR_FARPTR address
SFR_20BIT(DMA0DA); /* DMA Channel 0 Destination Address */
DMA0DA = 0x0516;
高手techbaby能否系统的说一下? 高手不敢当。我也是一个学习者,指针这一块其实真的挺难懂。
typedef void (* __SFR_FARPTR)(); --》 类型定义,定义新函数指针类型__SFR_FARPTR
#define SFR_20BIT(address) extern __SFR_FARPTR address --》宏
SFR_20BIT(DMA0DA);--》展开 extern __SFR_FARPTRDMA0DA; 外部函数指针声明
DMA0DA = 0x0516; --》对函数指针DMA0DA赋值,即DMA0DA指向地址0x0516
其实对指针赋值,就是将地址传给指针,同时地址也就是一个数值。(不知道理解的对不对,还望指正)。 techbaby 发表于 2013-11-6 22:20 static/image/common/back.gif
高手不敢当。我也是一个学习者,指针这一块其实真的挺难懂。
typedef void (* __SFR_FARPTR)(); --》 类 ...
好的,了解了,谢啦! 将UCA1TXBUF的地址转换为参数为void,返回值为void的函数指针,并赋给DMAODA Gallen.Zhang 发表于 2013-11-7 11:39 static/image/common/back.gif
将UCA1TXBUF的地址转换为参数为void,返回值为void的函数指针,并赋给DMAODA
多谢指点,Thanks! 学习了。。。{:smile:} 学习了! techbaby 发表于 2013-11-6 22:20 static/image/common/back.gif
高手不敢当。我也是一个学习者,指针这一块其实真的挺难懂。
typedef void (* __SFR_FARPTR)(); --》 类 ...
学习了!!
页:
[1]