void 和 void* 指针分别表示无类型和无类型指针。

void 的作用是限制:

  1,函数无返回值。

  2,函数无参数。

  当函数的返还值无参数的时候一定要加上 void ,因为在缺省的状态下函数的返还值是 int ,并且如果不需要的时候就一定要将他声明成 void 类型这样看着更明显。当函数无参数的时候在声明的时候也要加上 void 的这也是一个好习惯,增强了可读性,当然在 K&R C 中是允许在声明的时候省去参数的。

void 类型的和指针可以接受任何类型的类型的指针的赋值(但是不代表这个void类型的指针转化成相应的指针了,如果需要按照原指针的类型使用用,还是需要进行强制类型转换)。

#include<stdio.h>
int main()
{
int a=;
int *b;
b=&a;
void *c;
c=b;
printf("%d\n",*(int *)c);
}

在void指针存储的是结构指针需要注意的是看如下代码片段:

if( (*(STRUCTNAME *)p).next == NULL )
{
return FALSE;
}
else
{
free=(*(STRUCTNAME *)p).next;
(*(STRUCTNAME *)p).next= ( *(STRUCTNAME *)( (*(STRUCTNAME *)p).next ) ).next;
}

void *的作用

   你可以把 void * 指针看作是水果,水果有很多种类,可以是苹果,香蕉,但是不能说水果香蕉,因为还可能是苹果,但是你可以说香蕉是水果。同样的其他类型的指针可以直接赋值给 void * 指针,但是void* 指针就不可以直接赋值给其他类型指针,这里就需要进行类型强制转换,类型强制转换可以躲避过编译器错误的检测。所以在使用强制类型转化的时候需要确定这个转换是正确的。

  void * 指针是一种未知类型的指针,它在使用的时候不受限制,他可以用来存储任何类型的指针,这样得到的类型就可以按照你的需要进行转换。

  因为 void * 指针其实可以说是没有类型,就是编译器不知道指针所指向对象的长度。

  void * 指针不能进行副引用,就是不能取得 void *指针的内容。

  void * 指针在 ASNI 标准上不准许进行算法操作(如:void *a; int *b; a=b; *a=2; //错误) ASNI C 坚信进行算法操作一定要知道指向数据类型的大小,但是在 GNU 中就是可以的。 GNU 支持了更多的语法,但是为了可移植性,在编写代码的时候还是要按照 ASNI C 的标准。

最新文章

  1. 【BZOJ-2756】奇怪的游戏 最大流 + 分类讨论 + 二分
  2. Javascript--练习(包括主界面图片轮播效果)
  3. bootstrap-datetimepicker在经过GC(Google Closure Compiler)压缩后无法使用的解决方案
  4. 我的cocos2d-x集成sharesdk之旅(转)
  5. NET Core 1.0 RC2
  6. Windsock套接字I/O模型学习 --- 第二章
  7. WmS简介(三)之Activity窗口是如何创建的?基于Android7.0源码
  8. Spring源码阅读 源码环境搭建(一)
  9. MySQL的并发控制与加锁分析
  10. wpf Assembly.LoadFile dll GetType 反射 抛异常 不具有由 URI 识别的资源。
  11. 【Java】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类
  12. Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置
  13. xsync
  14. Android——自定义视图(一)转
  15. 【9】JMicro微服务-发布订阅消息服务
  16. Dubbo学习(一) Dubbo原理浅析
  17. informix如何查询第一条记录
  18. Robot Framework 自定义关键字 Ignore error
  19. NGINX -- 详解Nginx几种常见实现301重定向方法上的区别
  20. GPG入门 - 练习笔记

热门文章

  1. webpack01
  2. oracle命令查看表结构及表索引
  3. 在IE8下background-image不显示的解决方法
  4. http学习总结及思考
  5. Intellij IDEA 14 自动生成 serialVersionUID
  6. vsftpd配置文件详解 ---配置解说
  7. WEB服务器、网站、域名、IP地址、DNS服务器之间的关系
  8. windows下curl的安装和简单使用
  9. 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)
  10. java-logic====吃货联盟