zoukankan      html  css  js  c++  java
  • 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*类型,它可以接受任何的数据类型的参数传递进来。

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

  • 相关阅读:
    【SSM电商项目后台开发】004-用户模块
    【SSM电商项目后台开发】003-项目架构概览
    C#面向对象编程「字段与属性」
    C#基本语法
    C#学习笔记-简介
    软件工程团队作业展示
    “消灭选择困难症”软件设计规格说明书
    “消灭选择困难APP”软件需求规格说明书
    消灭选择困难APP
    消灭选择困难
  • 原文地址:https://www.cnblogs.com/geore/p/5816584.html
Copyright © 2011-2022 走看看