文档章节

void类型

小绿豆蛙
 小绿豆蛙
发布于 2014/06/18 15:50
字数 884
阅读 5
收藏 0

void: 

含义:无类型   

作用:说明性,说明函数无参数或者无返回值。

void *:

含义:无类型指针,可以指向任何数据类型

作用:int * pint  ;  void *pvoid ;   那么pvoid = pint;   不能是pint  = pvoid;  必须是pint = (int *)pvoid; 因为”无类型“包含”有类型“,“无类型”相当于“各种类型”。

在ANSIC标准中不允许void*类型直接做运算操作[pvoid++等等],

eg:void *memset(void *buffer, int c, size_t num);

void *memcpy(void *dest, const void *src, size_t len);

所以在写项目时候定义函数入口时有必要把参数定义成void*类型,像memcpy一样,这样使用就更灵活。

typedef:

是个关键字,这个关键字一般在项目上用来定义函数的类型。例如:typedef void *callback_t(void *context);

callback_t *callback;

为复杂的声明定义一个新的简单的别名。方法是:在原来的声明里逐步用别名替换一部

分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化

版。举例: 

 原声明:void (*b[10]) (void (*)());

变量名为b,先替换右边部分括号里的,pFunParam为别名一:

typedef void (*pFunParam)();

再替换左边的变量b,pFunx为别名二:

typedef void (*pFunx)(pFunParam);

原声明的最简化版:

pFunx b[10];

  
原声明:doube(*)() (*e)[9];

变量名为e,先替换左边部分,pFuny为别名一:

typedef double(*pFuny)();

再替换右边的变量e,pFunParamy为别名二

typedef pFuny (*pFunParamy)[9];

原声明的最简化版:

pFunParamy e;

int (*func)(int *p);

首先找到变量名func,外面有一对圆括号,而且左边是一个*号,这说明func是一个指针

;然后跳出这个圆括号,先看右边,又遇到圆括号,这说明(*func)是一个函数,所以

func是一个指向这类函数的指针,即函数指针,这类函数具有int*类型的形参,返回值

类型是int。

int (*func[5])(int *);

func右边是一个[]运算符,说明func是具有5个元素的数组;func的左边有一个*,说明

func的元素是指针(注意这里的*不是修饰func,而是修饰func[5]的,原因是[]运算符

优先级比*高,func先跟[]结合)。跳出这个括号,看右边,又遇到圆括号,说明func数

组的元素是函数类型的指针,它指向的函数具有int*类型的形参,返回值类型为int。

头文件相互包含:

头文件在定义时候最好能够按模块来区分,尽量减少头文件相互包含,会出很多麻烦的问题。例如'struct xxx'在形参中声明呀什么的,警告这不是你想要的什么什么的,这些个错误类型是如果类型定义的完整那么就是由于相互包含引起的,可以把出错的变量直接在报错头文件中声明一下就可以了。最好头文件也与模块一起独立出来。很有一个很奇怪的问题就是当用typedef定义函数类型时候在一个头文件中定义另一个头文件使用时候就报错意思说”找不到定义“,但是两个头文件要是一起定义就会说”重复定义“也不知道为什么?最后只能各定义各的用不同的名字相同的类型。


© 著作权归作者所有

共有 人打赏支持
小绿豆蛙
粉丝 0
博文 33
码字总数 13280
作品 0
海淀
程序员
C/C++语言void及void指针

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

技术小阿哥
2017/11/26
0
0
C/C++语言void及void指针《转》

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

狂斩一条龙
2011/08/20
0
0
【转】 void与void*详解

void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型; 2. 如果函数无参数,那么应声明其参数为void; 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void ; ...

qq_26512811
2017/12/13
0
0
void及void指针深层次探索

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

地狱的烈火
2013/04/26
0
0
void *指针

·C++提供了一种特殊的指针类型void* ,它可以保存任何类型对象的地址 double obj=3.14; double pd=&obj; void pv=&obj; pv=pd; void 表明该指针与一地址相关,但不清楚存储在此地址上的对象...

种地瓜
2016/08/20
17
1

没有更多内容

加载失败,请刷新页面

加载更多

Thinkphp5 优雅配置两个数据库

工作需要需要配置两个数据库,框架5.0的,步骤如下: 1、在database.php同级创建一个database2.php文件 在里面配置第二个数据库信息, 2、在config中配置这个数据库信息: 3、创建第二个表的...

wqzbxh
9分钟前
1
0
Socket网络编程进阶与实战

Socket网络编程进阶与实战 Socket对于每个工程师的重要性不言而喻。本课程将理论结合实践,带你从零开始,系统学习Socket编程技术,让Socket的学习不再那么零散与难以掌握,同时会提炼出Soc...

qq__2304636824
15分钟前
1
0
Android studio常用快捷键

Ctrl +Alt +Space //显示可用参数 Ctrl + Alt +M //抽取方法 Ctrl +Alt + F //提取全局变量 Ctrl +Shift + "+或-" //折叠/展开代码块 Shift + F6 //批量更改变量 Ctrl + Tab //切换器 Ctrl +...

lanyu96
27分钟前
1
0
@ControllerAdvice 拦截异常并统一处理

在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。 一、介绍 创建 MyControllerAdvice,并添...

狼王黄师傅
31分钟前
1
0
ajax传递参数给springmvc总结[转]

https://www.cnblogs.com/franson-2016/p/6770028.html https://www.cnblogs.com/xiaoxi/p/5708084.html 总结: 1.springmvc与Ajax交互,可以传入三种类型的数据: (1)文本:"uname=alice&......

废柴
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部