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

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

  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/geore/p/5816584.html
Copyright © 2011-2022 走看看