(BYTE *)0 表示什么意思

来源:百度知道 编辑:UC知道 时间:2024/05/02 17:49:14
在很多地方看到这个0,但就是找不到对他的解释,标准C中也没找到,奶奶的,不说是一个C吗,说一下不就都明白了,搞出来的东东C中又不常提及,显示水平高啊.(BYTE *)0 表示什么意思
哪本书上会介绍呢??将0强制转换为BYTE类型的指针值?有什么作用?想不到有这么多高手啊,是一个宏定义的.发下:typedef BYTE * BYTE_P;

#define offsetof(s,m) (WORD)( (s *)0)BYTE_P)&(((->m) - (BYTE_P)0 )
这个是计算结构体中成员放在EEPROM
中的地址的偏移量的宏,也就是计算成员的实际地址,S可代表结构体名,m代表成员名,然后取其地址,其中(BYTE_P)0 表示什么? 谁能留下电话,万分感谢.

以c语言解释如下:
0本来表示一个整数。在C语言中,内存地址也是用整数int表示(32bit)。因此,
(BYTE *)0 表示把整数0强制转换为BYTE型数值的地址。

将0强制转换为BYTE类型的指针值

将0强制转换为BYTE类型的指针值。

任何一本C语言方面的教材都会有,请参考指针和类型转换的相关章节。

****************************************

实际上就是NULL,只不过在某些编译器中,直接用0会导致编译器报类型不一致的警告,所以为了避免出现这种警告就使用了强制类型转换。

unsigned char *k = (BYTE*)0;

unsigned char *k = NULL;
一个意思

就是把指针设置为无效。
你不加(BYTE*)应该也可以。

0在指针中代表NULL
这相当于定义一个unsighed char型的指针,初始化为NULL。
等价于unsigned char *p = NULL;
不知道你这个是在什么环境中用的,估计是将初始化为NULL的指针作为右值赋值。呵呵。最好能把上下的语句贴出来便于分析