目录
前言
void * 是一种特殊的指针, 无类型指针,即通用指针,因为没有指定类型,可以将任何类型指针都可以赋值给它。
void 牛津词典英英翻译: a large empty space ,中文翻译即一片空白空间。void * ,就像无主的空间,谁都可以进入。
1. void * 赋值;
下面代码,void * v 可以赋值 整型指针,也可以赋值浮点型指针。
int i = 10; /* 创建整型变量 */
int* iptr = &i; /* 创建整型指针,赋值i的地址 */
float f=20; /* 创建浮点型变量 */
float * fptr=&f; /* 创建浮点型指针,赋值f的地址 */
void * v = iptr; /* 整型指针赋值给void* */
printf("%p\n",v); /* 打印v的指针 输出:012FFB88 */
printf("%i\n", *((int *) v) ); /* 打印v指向地址中的变量i的值 输出 10 */
v = &i; /* 整型变量地址赋值给 void* */
printf("%p\n",v); /* 打印v的指针 输出:012FFB88 */
v=fptr; /* 浮点型指针赋值给void* */
printf("%p\n",v); /* 打印v的指针 输出:012FFD1C */
printf("%f\n", *((float *) v)); /* 打印v指向地址中的变量i的值 输出 20.000000 */
2. void * 作为函数形参
编写miniprint函数,根据传入的类型,打印出数值
#include <stdio.h>
void miniPrint (void *);
void miniPrint (void * argv,char type){
switch(type){
case 'i' :printf("%i\n", *((int *) argv)); break; /* 打印整型 */
case 'f' :printf("%f\n", *((float * )argv));break; /* 打印浮点型 */
case 'c' :printf("%c\n", *((char *)argv)); break; /* 打印字符型 */
}
}
int main()
{
int i = 10; /* 创建整型变量 */
int* iptr = &i; /* 创建整型指针,赋值i的地址 */
float f=20; /* 创建浮点型变量 */
float * fptr=&f; /* 创建浮点型指针,赋值f的地址 */
char c='f';
char * cptr=&c;
void * v ;
v=iptr;
miniPrint(v,'i'); /*打印整型 */
v=fptr;
miniPrint(v,'f'); /*打印浮点型 */
v=cptr;
miniPrint(v,'c'); /*打印字符型*/
}
3. void * 不可以自运算
如 v++; --v ;等都为不合法的。
int a =3;
void * v= &a;
v++; /* 无效 */