#include <stdio.h>
#include <stdlib.h>

//void *可以是任意类型的数据,任意类型都可以存储,也可以转换任意类型
int main(){
//例1:将普通指针变量赋值给void*指针并打印输出
int pa = 100;
int *p = &pa;
void * v = p;
printf("v=%d \n",*((int*)v));

//例2:通过void*指针修改变量的值
float f = 3.14f;
void *v2 = &f;
printf("f=%.2f,v2=%.2f\n",f,*((float*)v2));//输出f=3.14,v2=3.14
*((float*)v2) = 100.99f;//通过void*指针修改值后
printf("f=%.2f,v2=%0.2f\n",f,*((float*)v2));
//输出 f=100.99,v2=100.99

system("pause");
return 0;
}




/*


注意:在ANSI C标准中,不允许对void指针进行一些算术运算如p++或p+=1等,


因为既然void是无类型,那么每次算术运算我们就不知道该操作几个字节


但是GNU则不这么认定,它指定void *的算法操作与char *一致。因此下列语句在GNU编译器中皆正确:


pvoid++; //GNU:正确pvoid += 1; //GNU:正确pvoid++的执行结果是其增大了1


*/