【C语言】void * 通用指针类型

目录

前言

 1. void *  赋值;

2. void * 作为函数形参

3. void * 不可以自运算


前言

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++;             /* 无效 */

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值