鱼C论坛

 找回密码
 立即注册
查看: 2008|回复: 4

[已解决]关于(void*)0的含义

[复制链接]
发表于 2017-7-22 18:46:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
宏定义中#define NULL (void*)0 ,int *pi=NULL;等于int *pi=(void*)0,void类型不是不能向其他类型强制转化么?
p中存放的是地址类型的数据,是不是可以简单的理解为将0X00000000给了p?
还有就是(char*)0的含义怎么理解?
0为地址,0X00000000将地址给指针变量,
然后把0X000000000指向的内容强制转化成char类型的?












最佳答案
2017-7-22 20:04:46
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~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-22 19:07:05 | 显示全部楼层
http://blog.csdn.net/harry_lyc/article/details/6221928
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-22 19:49:23 | 显示全部楼层
ba21 发表于 2017-7-22 19:07
http://blog.csdn.net/harry_lyc/article/details/6221928

不是我想要的答案啊大哥,int *pi=(void*)0;帮我解释一下这个是什么含义行吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-22 19:56:46 | 显示全部楼层
人之初 发表于 2017-7-22 19:49
不是我想要的答案啊大哥,int *pi=(void*)0;帮我解释一下这个是什么含义行吗?

哪文章不是很清楚吗?道理不是一样
int *pi=(void*)0;
int *po=NULL;一个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-22 20:04:46 | 显示全部楼层    本楼为最佳答案   
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~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表