void*和void类型
Posted GEORES
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类型的主要内容,如果未能解决你的问题,请参考以下文章
类型 'void' 不能分配给类型 'Recipe[]'。这行代码中的错误 this: recipes = this.recipeService.getRecipes();