例如:

#define NULL ((void *)0)

用来定义无效的指针

(void *)0 就是将0强制转化为(void *)类型的指针

char *ch = (void *)0;//ch指向地址0

一般把(void*)0定义为NULL
表示这是个空指针

void的含义
  void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
  众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型

  转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。

例如:
  float *p1;
  int *p2;
  p1 = p2;

其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为:
  p1 = (float *)p2;
而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:
  void *p1;
  int *p2;
  p1 = p2;

但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包

容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错:
  void *p1;
  int *p2;
  p2 = p1;

提示“'=' : cannot convert from 'void *' to 'int *'”。
在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:
add ( int a, int b )
{
  return a + b;
}
int main(int argc, char* argv[])
{
  printf ( "2 + 3 = %d", add ( 2, 3) );
}

程序运行的结果为输出:
2 + 3 = 5
这说明不加返回值说明的函数的确为int函数。

(void*)0 的理解的更多相关文章

  1. uCOS2014.1.11(转载)(void*)0 的理解

    一般把(void*)0定义为NULL表示这是个空指针void的含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据.众所周知,如果指针p1和p2的类型 ...

  2. 理解javascript:void(0);和href="#"

    我们经常可以看见这样的代码: <a href="javascript:void(0);">链接</a> void的意思是空的,无效的意思,但是在js中是表示 ...

  3. <a href=”#”>与 <a href=”javascript:void(0)” 的区别

    <a href=”#”>中的“#”其实是锚点的意思,默认为#top,所以当页面比较长的时候,使用这种方式会让页面刷新到页首(页面的最上部) javascript:void(0)其实是一个死 ...

  4. IE6与 javascript:void(0)

    遇到过几次这种问题,现在总结一下. 代码: <a onclick="window.location.href='http://www.google.com'" href=&q ...

  5. 【repost】javascript:;与javascript:void(0)使用介绍

    有时候我们在编写js过程中,需要触发事件而不需要返回值,那么就可能需要这样的写法 最近看了好几个关于<a>标签和javascript:void(0)的帖子,谨记于此,以资查阅. 注:以下代 ...

  6. ie6 javascript:void(0);

    遇到过几次这种问题,现在总结一下. 代码: <a onclick="window.location.href='http://www.google.com'" href=&q ...

  7. (void)0和0的区别及用法

    (void)0相当于宏NULL,NULL本身的含义为“空”,在c语言代表“不存在.不确定”的含义. 0不能简单的理解为“没有”的意思,在c语言及二进制中,0和1代表的是“一件事物的正反两个方面“,0是 ...

  8. 宏里面的(void)0

    在<c标准库>实现assert.h中有一个语句: #define assert(test) ((test)?(void)0 : _Assert(__FILE__":"_ ...

  9. HTML --- <a href=”#”>与 <a href=”javascript:void(0)” 的区别

    <a href=”#”>中的“#”其实是锚点的意思,默认为#top,所以当页面比较长的时候,使用这种方式会让页面刷新到页首(页面的最上部) javascript:void(0)其实是一个死 ...

随机推荐

  1. backbonejs中的集合篇(一)

    一:集合概念 集合是多个模型,如果把模型model理解为表结构中的行,那么集合collection就是一张表,由多个行组成.我们经常需要用集合来组织和管理多个模型. 二:创建集合 1:扩展Backbo ...

  2. SVN clean up问题

    问题如截图所示: 解决方法:在根目录clean up,注意把所有的选项都勾上

  3. thinkphp 调用系统的方法

    在需要调用的脚本 加载 load('filename');//filename为文件名

  4. FZU 2027 单词问题 map标记字符串典型问题

    题目链接:单词问题 找一个字符串里的所有单词,重复的只输出一次.关于map函数key值是字符串的问题一直比较含糊... 挣扎了一番,大概是,map的key值是char型数组的时候,标记的是地址,于是有 ...

  5. PHP慢脚本日志和Mysql的慢查询日志(转)

      1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候, ...

  6. 精华 ionic入门之色彩、图标、边距和界面组件:列表

    目录:色彩.图标和边距色彩图标内边距界面组件:列表列表:.list成员容器:.item.item: 嵌入文本.item : 嵌入图标.item : 嵌入头像.item : 嵌入缩略图.item : 嵌 ...

  7. ModuleWorks免费下载使用方法大全

    ModuleWorks为模拟机器的工具运转及(或)机床和车床材料的搬运提供了一整套解决方案. 模拟技术可以识别潜在的碰撞问题,允许在NC代码生成前进行除错检查,并且渐渐成为CAM处理方面必不可少的解决 ...

  8. 在hibernate中用sql语句

    在hibernate中用sql语句,语句是createSQLquery 查出来的是,一列或者多列的数据,要将其转化为对象,有两种方式, 对于已经被hibernate所管理的实体类,在后面加.adden ...

  9. 一看就会之—利用IIS服务发布网站(实践篇)上

    转自:http://blog.csdn.net/zwk626542417/article/details/9796259 概述 IIS全称为互联网信息服务,是由微软公司提供的基于运行Microsoft ...

  10. solr学习之入门篇

    一,简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http ...