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

  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*类型,它可以接受任何的数据类型的参数传递进来。

---------如有错误,希望大家多多指正---------

最新文章

  1. 【转】机器学习教程 十四-利用tensorflow做手写数字识别
  2. 金字塔Lucas-Kanande光流算法实现
  3. SQL Server 变更数据捕获(CDC)监控表数据
  4. Android触摸事件流程剖析
  5. Javascript函数调用的四种模式
  6. AndroidStudio不能解析R的一种可能
  7. [水煮 ASP.NET Web API2 方法论](3-4)设置路由可选项
  8. Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
  9. ZOJ 3810 Pretty Poem 分类: ACM 2015-05-17 14:40 83人阅读 评论(0) 收藏
  10. 57. Insert Interval
  11. 迅雷创始人程浩:创业公司5招做好内部创新(组建小型敢死队:一共3个人,一个产品经理,两个研发;腾讯做不做这个项目是一个伪命题;让用户来验证,而不是相反 good)
  12. Android蓝牙开发深入解析
  13. unity使用UGUI创建摇杆
  14. Django基础(四)
  15. SaaS教父:我眼中最糟糕的9条SaaS建议(转)
  16. 转---30 分钟学会 Flex 布局
  17. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
  18. Operfire 安装指南
  19. Android之getSystemService
  20. 算法导论--装备线调度(升序&amp;amp;&amp;amp;降序输出)

热门文章

  1. P3515 [POI2011]Lightning Conductor(决策单调性分治)
  2. 双指针---有序数组的TWO SUM
  3. 164-基于TI DSP TMS320C6455和Altera FPGA EP2S130的Full CameraLink PDS150接口板卡
  4. vue,一路走来(14)--短信验证码框的实现(类似支付密码框)
  5. 一、Google开发者工具功能页面截图
  6. sql for loop
  7. (ACM模板)栈stack
  8. 【LeetCode】树(共94题)
  9. Flutter-icon
  10. 您的加密USB驱动器是否安全?黑客又是如何攻破的?