void和void*指针的一些理解
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*指针的一些理解的更多相关文章
- 函数指针-如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的 ...
- 深入理解void以及void指针的含义
void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值. ...
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- (七)C语言中的void 和void 指针类型
许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...
- C/C++语言void及void指针深层探索(转)
转自:http://www.lanou3g.com/blog/sort/SelfiOS/page/78 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一 ...
- 【转载】C/C++语言void及void指针深层探索
C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...
- void及void指针含义的深刻解析
http://blog.csdn.net/geekcome/article/details/6249151 ----------- void的含义 void即“无类型”,void *则为“无类型指针” ...
- 不要伤害指针(5)--void和void指针详解
原文转载地址:http://blog.csdn.net/sunchaoenter/article/details/6587426 增加自己的想法,作为笔记. 1.概述 许多初学者对C/C++语言中的v ...
随机推荐
- (转)AIX 5.3安装SSH .
AIX 5.3安装SSH . 原文:http://blog.csdn.net/chunhua_love/article/details/12004845 环境:OS:AIX 5.3SSH: opens ...
- 3n+1猜想
1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ...
- pat1046. Shortest Distance (20)
1046. Shortest Distance (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The ...
- Linux安装phpMyAdmin配置管理多个数据库
1.下载 :phpMyAdmin 2.解压安装包: tar -zxvf phpMyAdmin-4.6.5.2-all-languages.tar.gz 3.替换目录 : mv phpMyAdmin-4 ...
- POJ 1236——Network of Schools——————【加边形成强连通图】
Network of Schools Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u ...
- C#入门--索引器
C#入门--索引器 索引器允许类或结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数. 索引器概述 索引器使得对象可按照与数组相似的方法进行索引. get 访问 ...
- Java编译及装载
Java类加载机制 JVM将类加载过程划分为三个步骤:装载.链接和初始化. 装载(Load):装载过程负责找到二进制字节码并加载至JVM中,JVM通过类的全限定名(com.bluedavy. Hell ...
- 微信小程序电商实战-入门篇
小程序开发工具有新版本更新啦!开发体验更好了,详情可以查看微信公众平台-小程序https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/devtools.h ...
- RN的打包
1.首先执行以下命令 在android目录下 keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -key ...
- jquery_lazyload插件
延迟加载图片的 jQuery 插件 http://www.neoease.com/lazy-load-jquery-plugin-delay-load-image/