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 的标准。

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. CESM部署安装环境和使用

    平台信息 Description: CentOS Linux release 7.6.1810 (Core) 安装CESM 安装前提:(小提示:耗时较长,需要耐心)阅读原文 CentOS 7(检查:s ...

  2. python 编程,应该养成哪些好的习惯

    python 编程,应该养成哪些好的习惯? https://www.zhihu.com/question/28966220 无缓冲输出 python -u  sys.stdout.flush() 性能 ...

  3. 性能测试工具LoadRunner04-LR之浏览器打不开

    环境:win7+lr11 IE浏览器要在9以下,9以上lr11是调不起来的 火狐浏览器,我用的是28,最新版本的也调不起来 可以调起浏览器但没有事件? 1.把INTERNET高级设置中的“启用第三方浏 ...

  4. My first Python program(附增加清屏方法)

    #TempConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[-1] in ['F', 'f']: C = (eval(Te ...

  5. React.js 小书 Lesson2 - 前端组件化(一):从一个简单的例子讲起

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson2 转载请注明出处,保留原文链接和作者信息. 很多课程一上来就给大家如何配置环境.怎么写 Re ...

  6. 【转】android ViewPager,ViewFlipper,ViewFlow实现左右滑动

    转自:http://blog.csdn.net/zhouyuanjing/article/details/8290454 开篇 首页只是作为ViewPager,ViewFlipper,ViewFlow ...

  7. Devexpress Xtrareports 创建多栏报表

    根据官方回答:多列或多行(取决于当前的多栏设置)呈现数据的报表 这种报表是有用的,例如,当每个明细区都只显示少量数据.并且需要在一列的右侧打印下一个明细区时,这样就能充分利用整个页面的宽度,此外,当创 ...

  8. canvas实例(基础)

    JS实现五子棋大战:GitHub源码 知识点总结: 第一步.基础: //获取canvas var chess = document.getElementById('chess'); //获取上下文,创 ...

  9. iOS开发之Objective-c的AES256加密和解密算法的实现

    原文:http://www.lidaren.com/archives/1470 高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法. 以下实现 ...

  10. selenium找不到元素

    1.页面元素处于不显示状态时,找不元素.必须使元素处于显示状态.使用js 或者 元素的点击事件等方式可以实现. " src="index.php?m=Index&a=Men ...