文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6 取整除法

python3.6 中取整除法运算逻辑如下: d 非零,那么商 q 满足这样的关系: a = qd + r ,且0 ≤ r n1=7//3#7 = 3*2 +1n2=-6.1//3#-7 = 3*(-3)+2'{},{}'.format(n1,n2) 从运行结果可以...

colinux
20分钟前
3
0
阶段总结——用虚拟机搭建一个高可用负载均衡集群架构

[toc] linux基本知识已经介绍完,现有一个业务需要操作,通过对这个项目的操作,可以复习、总结、巩固之前的知识点; ** 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,...

feng-01
23分钟前
0
0
mysql 设置utf8字符集 (CentOS)

1.查看数据库及mysql应用目前使用的编码方式 (1)链接mysql 客户端 (2)执行:status 结果: 2.修改mysql 应用的字符编码(server characterset ) (1)打开配置文件:vim /etc/mysql/my...

qimh
24分钟前
0
0
windows无法格式化u盘解决方法

1。点开始-运行-输入cmd-format f: /fs: fat32 (这里f:是指U盘所在盘符) 这个格式化会很慢 请耐心等待

大灰狼wow
35分钟前
0
0
MySql 8.0连接失败

原来,MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_s...

放飞E梦想O
52分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部