void*和void类型
| 版权声明:本文为博主原创文章,未经博主允许不得转载。
void的类型是无类型的数据,void*表示无类型的指针。其中void*可以指向任何数据类型的指针。
void类型的用法:
(1)、void类型不能直接声明变量,因为对于一个无类型的变量,编译器是不知道要为这个数据分配多少个内存单元,如下:
int main(void)
{
void a; //错误
return 0;
}
如果存在上面例子中的语句的话,编译器将报错,如下图:
(2)、void的类型作为函数的返回值时,表明该函数不需要返回数据给函数的调用处。
(3)、void*声明的变量可以指向任何类型的指针,如下:
int main(void)
{
void *a;
void *b;
int value1 = 5;
char value2 = 'm'; int *c = &value1;
char *d = &value2; a = c;
b = &d; cout << "void *a: " << a << endl;
cout << "void *c: " << c << endl;
cout << "void *b: " << b << endl;
cout << "void *d: " << static_cast<void*>(&d) << endl; return 0;
}
如下图所示:void*变量指向的地址和复制变量的地址一致,说明voi*指针指向了特定的内存单元。
但是,void*可以指向任何类型的指针,但是其他类型的指针却不可以指向void*类型,如下:这是因为类型不一致,int*不能转换成void*类型,其他的也一样(char*,int*等类型都不能相互转换,要转换的话必须进行强制类型的转换)
int main(void)
{
void *a;
int* value1;
value1 = a; //错误
return 0;
}
(4)、数据类型的封装,如下:
void* test(void* a, void*b);
C++中的memcpy函数和memset函数,memmove函数等函数都是。如下函数原型:
在这些函数的形式参数值为void*类型,它可以接受任何的数据类型的参数传递进来。
---------如有错误,希望大家多多指正---------
void*和void类型的更多相关文章
- (七)C语言中的void 和void 指针类型
许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...
- C++中void和void*指针的含义 (指针类型的含义)
转载自:http://blog.csdn.net/lee_shuai 指针有两个属性:指向变量/对象的地址和长度,但是指针只存储地址,长度则取决于指针的类型:编译器根据指针的类型从指针指向的地址向后寻 ...
- void *与id类型的相互转换
void *与id类型相互转换 在MRC下,void *与id类型相互转换完全没问题. id obj = [[NSObject alloc] init]; void *p = (void *)p; o ...
- Java JNA (四)—— void**、void*、char**、char*、int*等类型映射关系及简单示例
ByReference类有很多子类,这些类都非常有用. ByteByReference.DoubleByReference.FloatByReference. IntByReference.LongB ...
- void与其他类型的转化
#include<stdio.h> void f(void *a) { printf("%d\n",a); } int main() { int b=10; f(b); ...
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- [转载]void及void*的深度剖析
void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可 ...
- void和void*
void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值.例 ...
- void与void *
转载:http://blog.csdn.net/geekcome/article/details/6249151 void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据 ...
随机推荐
- python学习第十二天列表的循环,排序,统计操作方法
python列表最重要的列表的循环,任何有序列表离不开循环,列表的循环 for in range等关键词,还有列表排序,正序,倒序,还有列表每个元素的最大,最小,统计元素的个数等. 1,列表的循环 ...
- bzoj2396 神奇的矩阵(随机化)
Time Limit: 5 Sec Memory Limit: 512 MB 给出三个行数和列数均为N的矩阵A.B.C,判断A*B=C是否成立. 题目可能包含若干组数据. 对于每组数据,第一行 ...
- SQL 查询中not in 与 not exists 的区别
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- 安卓构架组件——概述 Android Architecture Components
谷歌官文文档地址:https://developer.android.google.cn/topic/libraries/architecture 安卓构架组建是库的集合:帮助你设计健壮的.易测试的. ...
- win10开机出现两个系统
1.cmd(Ctrl+R) 2.输入msconfig 3.选引导 4.删除多余的系统(切记不能删错)
- vue动态设置Iview的多个Input组件自动获取焦点
1.html,通过ref=replyBox设置焦点元素,以便后续获取 // 动态设定自动获取焦点按钮 <p class="text-right text-blue fts14 ptb1 ...
- shell截取小数点前后的子串
- elk相关启动脚本-shell编写
elasticsearch-restart: #!/bin/bash PID=`ps -ef|grep elasticsearch|grep -vE 'grep|controller|elastics ...
- pip命令一般使用
pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载 1 # wget "https://py ...
- Python网络编程:Linux epoll
原文地址:http://scotdoyle.com/python-epoll-howto.html 介绍 Python已于2.6版本添加访问Linux epoll库的API.这篇教程使用Python ...