文档章节

void类型

小绿豆蛙
 小绿豆蛙
发布于 2014/06/18 15:50
字数 884
阅读 5
收藏 0
点赞 0
评论 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
博文 30
码字总数 13280
作品 0
海淀
程序员
void和void指针解析

(一)基本概念 void 类型:空类型,用于特殊目的的没有操作,也没有值的类型。不能被显式或隐式的转换为任意非空类型,可以通过强制类型转换为void类型。 void指针:指向任何对象的指针都可...

AlphaJay ⋅ 2012/05/31 ⋅ 0

void与void*详解

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

ustbgaofan ⋅ 2015/01/07 ⋅ 0

void及void指针深层次探索

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

地狱的烈火 ⋅ 2013/04/26 ⋅ 0

C/C++语言void及void指针《转》

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

狂斩一条龙 ⋅ 2011/08/20 ⋅ 0

C/C++语言void及void指针

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

技术小阿哥 ⋅ 2017/11/26 ⋅ 0

【转】 void与void*详解

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

qq_26512811 ⋅ 2017/12/13 ⋅ 0

void *指针

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

种地瓜 ⋅ 2016/08/20 ⋅ 1

void指针的用法

今天在做一个用信号量解决有界缓冲区生产者/消费者问题的时候。用到了void指针来实现泛型。比如其中一个函数的定义是这样的: void Write(void *data, int size) 要向缓冲区中写入数据data,...

Lwxxx ⋅ 2012/08/01 ⋅ 0

void指针和typedef函数

一、void* void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。 int pint; void pvoid; pvoid = pint; / 不过不能 pint = pvoid; / 如果要将pvoid赋给其他类型指针...

acemumu ⋅ 2013/03/05 ⋅ 0

深入理解void类型

1.空指针 一般来说,程序的起始地址是从“代码区”的0地址开始存放的(注:如果插入一个内存分布图,则更能说明问题,此处省略),但实际上现代操作系统并非如此,却保留了从0开始的一块内存。...

j_m ⋅ 2012/10/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 43分钟前 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 46分钟前 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 49分钟前 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 57分钟前 ⋅ 0

linux实用操作命令

参考 http://blog.csdn.net/qwe6112071/article/details/50806734 ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件-A 同-a,但不列出"."和"...

简心 ⋅ 今天 ⋅ 0

preg_match处理中文符号 url编码方法

之前想过直接用符号来替换,但失败了,或者用其他方式,但有有些复杂,这个是一个新的思路,亲测可用 <?php$str='637朗逸·超速新风王(300)(白光)'; $str=iconv("UTF-8","GBK",$s...

大灰狼wow ⋅ 今天 ⋅ 0

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 今天 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 今天 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部