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

void 的作用是限制:

  1,函数无返回值。

  2,函数无参数。

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

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

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a=;
  5. int *b;
  6. b=&a;
  7. void *c;
  8. c=b;
  9. printf("%d\n",*(int *)c);
  10. }

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

  1. if( (*(STRUCTNAME *)p).next == NULL )
  2. {
  3. return FALSE;
  4. }
  5. else
  6. {
  7. free=(*(STRUCTNAME *)p).next;
  8. (*(STRUCTNAME *)p).next= ( *(STRUCTNAME *)( (*(STRUCTNAME *)p).next ) ).next;
  9. }

void *的作用

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

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

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

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

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

void和void*指针的一些理解的更多相关文章

  1. 函数指针-如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  2. typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

    首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的 ...

  3. 深入理解void以及void指针的含义

    void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值. ...

  4. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  5. (七)C语言中的void 和void 指针类型

    许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...

  6. C/C++语言void及void指针深层探索(转)

    转自:http://www.lanou3g.com/blog/sort/SelfiOS/page/78 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一 ...

  7. 【转载】C/C++语言void及void指针深层探索

    C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...

  8. void及void指针含义的深刻解析

    http://blog.csdn.net/geekcome/article/details/6249151 ----------- void的含义 void即“无类型”,void *则为“无类型指针” ...

  9. 不要伤害指针(5)--void和void指针详解

    原文转载地址:http://blog.csdn.net/sunchaoenter/article/details/6587426 增加自己的想法,作为笔记. 1.概述 许多初学者对C/C++语言中的v ...

随机推荐

  1. appium使用常见问题汇总--持续更新

    问题1:使用adb devices查看连接设备,提示unauthorized 解决方案:进入进程管理,关闭adb进程,然后再查看连接设备 问题2:adb connect ip提示远程计算机积极拒绝,无 ...

  2. Mybatis学习笔记7 - select查询的相关属性使用

    1.当接口的返回类型是集合List时,resultType要写集合中元素的类型 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean ...

  3. JobService 7.0 定时任务不生效

    代码 // 构建JobInfo对象,传递给JobSchedulerService JobInfo.Builder builder = new JobInfo.Builder(JOB_ID,new Co ...

  4. [转]dataTables-使用详细说明整理

    本文转自:http://blog.csdn.net/mickey_miki/article/details/8240477 本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[htt ...

  5. nginx 访问路径配置

    比如: http://127.0.0.1/ 对应的物理路径 c:/a/b/c 比如:http://127.0.0.1/eec 访问的地址对应的物理路径: d:/a/b/c #user nobody; ...

  6. 模拟登陆并爬取Github

    因为崔前辈给出的代码运行有误,略作修改和简化了. 书上例题,不做介绍. import requests from lxml import etree class Login(object): def ...

  7. 虚拟机中Centos7搭建本地仓库

    iso放入光驱(虚拟机光驱)后,设备目录是/dev/sr0 表示光驱,被挂载道 /run/media/c4t/CentOS\ 7\ x86_64目录下 [c4t@localhost ~]$ df文件系 ...

  8. 关于微信小程序登录授权

    小程序的API接口文档写的很清晰,现在理一遍思路. 前端通过wx.login()获取code ,把code发给后台,后台返回openid,再获取用户的授权信息(这里先判断是否授权,授权过的就直接进入小 ...

  9. SQLite的使用

    通常在大型系统和网站一般使用的数据基本上就是Oracle,MySQL,MSSqlServer三种.但是在某些情况下会相对麻烦,如果仅仅需要在客户端保存一些数据.SQLite无疑是最佳选择之一.他是一种 ...

  10. python面试题——爬虫相关

    1.接触过几种爬虫模块 urllib.requests这两种爬虫模块. 2.robots协议是什么? 它就是一个防君子不防小人的协议,网站有一些数据不想被爬虫程序爬取,可以编写robots协议文件,明 ...