关于(void*)0的含义
宏定义中#define NULL (void*)0 ,int *pi=NULL;等于int *pi=(void*)0,void类型不是不能向其他类型强制转化么?p中存放的是地址类型的数据,是不是可以简单的理解为将0X00000000给了p?
还有就是(char*)0的含义怎么理解?
0为地址,0X00000000将地址给指针变量,
然后把0X000000000指向的内容强制转化成char类型的?
http://blog.csdn.net/harry_lyc/article/details/6221928 ba21 发表于 2017-7-22 19:07
http://blog.csdn.net/harry_lyc/article/details/6221928
不是我想要的答案啊大哥,int *pi=(void*)0;帮我解释一下这个是什么含义行吗? 人之初 发表于 2017-7-22 19:49
不是我想要的答案啊大哥,int *pi=(void*)0;帮我解释一下这个是什么含义行吗?
哪文章不是很清楚吗?道理不是一样
int *pi=(void*)0;
int *po=NULL;一个意思 C语言中的 (void*)0 与 (void)0
前几天看到一个宏, 它大概是这样的:
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))
代码的含意简单, 关键是那个 (void)0 的用法, 我还是第一次见到(别笑).
我用 void 的时候, 有两种情况:
1.放到函数前面, 强调函数没有返回值, 也就是说函数不能作右值
如: void fun(int x);
2.放到函数形参里面, 强调函数无任何参数
如: int fun(void);
还有一种用法是:
#define NULL ((void*)0)
当然, 这就是NULL空指针的定义方式(在 stdlib.h 里面).
可, 上面宏的 (void)0 , 一开始确实让我觉得有点奇怪, 不知道干嘛的, 平静下来, 想了想.
原来, 宏里面这样用的目的是防止该宏被用作右值, (void)0 本身也不能作右值, 因为 void 非实际的类型!
ok~~~
页:
[1]