版权声明:本文为博主原创文章,未经博主允许不得转载。

  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类型的更多相关文章

  1. (七)C语言中的void 和void 指针类型

    许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...

  2. C++中void和void*指针的含义 (指针类型的含义)

    转载自:http://blog.csdn.net/lee_shuai 指针有两个属性:指向变量/对象的地址和长度,但是指针只存储地址,长度则取决于指针的类型:编译器根据指针的类型从指针指向的地址向后寻 ...

  3. void *与id类型的相互转换

    void *与id类型相互转换 在MRC下,void *与id类型相互转换完全没问题. id obj = [[NSObject alloc] init]; void *p = (void *)p; o ...

  4. Java JNA (四)—— void**、void*、char**、char*、int*等类型映射关系及简单示例

    ByReference类有很多子类,这些类都非常有用. ByteByReference.DoubleByReference.FloatByReference. IntByReference.LongB ...

  5. void与其他类型的转化

    #include<stdio.h> void f(void *a) { printf("%d\n",a); } int main() { int b=10; f(b); ...

  6. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  7. [转载]void及void*的深度剖析

    void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可 ...

  8. void和void*

    void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值.例 ...

  9. void与void *

    转载:http://blog.csdn.net/geekcome/article/details/6249151 void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据 ...

随机推荐

  1. [Python] 迭代器是什么?你每天在用的for循环都依赖它!

    从循环说起 顺序,分支,循环是编程语言的三大逻辑结构,在Python中都得到了支持,而Python更是为循环结构提供了非常便利的语法:for ... in ... 刚从C语言转入Python的同学可能 ...

  2. python学习第八天二进制和字符编码有关联

    计算机所能识别只有0,1这两种状态,但是我们人类用字母,汉字,还有其他语言,那么怎么和计算机进行沟通呢,python编程语言最早unicode,现在统一用utf8,UTF8通用的编码语言,所有语言都包 ...

  3. NGUI的下拉框的使用(popup list script)

    一,我们先添加一个sprite,选择sprite,右键选择attach,添加box collider, 然后右键选择attach,添加popup list script ,我们给popup list ...

  4. java 接口默认方法的使用

  5. JavaScript的三大组成部分

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  6. new和malloc申请内存失败后的处理

    1.c++ 标准 new 失败是抛出异常的,Visual C++ 6.0中返回一个NULL指针. 使用new(std::nothrow)可以保证失败时返回NULL; 因此完全可以 #define ne ...

  7. html5 自制播放器

    代码实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. autoit3 脚本自动安装实例

    软件自动安装的相关实例!贴出来用于参考,并部分相关语法与示例 #RequireAdmin If DriveMapGet("T:")=="" Then Drive ...

  9. springboot+jsp项目实例(第二弹)(成功)

    1.创建spring boot项目,使用idea自带的spring initializr创建Spring boot的maven项目(我是先创建了一个空的项目). 开始创建Spring boot项目,点 ...

  10. Ubuntu新建用户组

    新建用户组 sudo addgroup groupname 把现有用户加入新建的用户组 sudo adduser username groupname