c void* 使用

void*作为函数返回类型(C语言)_void返回值类型返回的是什么_Mye_Strive的博客-CSDN博客 

C语言 --- void的用法解析_c语言_浮云流响-华为云开发者联盟 

void* 简介

在c 常常会碰到void* 的相关问题,我们这里先说结论,void* 是说任意类型,可以返回任意类型,也可以接受任意类型,但是在确定什么类型之后就必须要进行强制转换。

void*不是空,也不是不返回,而是返回一个无类型,也可以叫任意类型的指针,重点是指针

void*作为返回值使用 

 

#if 1 
void  RetInt(int a)  //void 没有返回值
{
	printf("void  RetInt(int a) :  %d\n",a);
	return;
}
void*  RetunInt(int *a)  // void*  返回的是 int *
{
	printf("void*  RetunInt(int *a)  : %d\n", *a);
	return a;
}
void* ReturnChar(char* a)// void* 返回的是char *
{
	printf("void* ReturnChar(char*)  : %s\n", a);
	return a;
}


int main()
{
	int a = 10;
	int *n;  // 返回值RetunInt(int* );
	char str[15] = "test_void*";
	char *strp;  // 返回值 void* ReturnChar(char* a)
	RetInt(a);
	printf("=================================  \n");
	n = (int*)RetunInt(&a);
	printf("RetunInt(&a) : %d\n",*n);
	printf("=================================  \n");

	strp = (char*)ReturnChar(str);
	printf("void* ReturnChar(char* a)) : %s\n", strp);
	system("pause");
	return 0;
}
# endif 

void*作为参数使用

.void型指针作为形参传递后,在子函数内可以被转换成任意类型解引用,如下:A结构体类型的void指针
先强制转换为int *,再转换为A *。

 


typedef  struct
{
	int   m;
	struct arg
	{
		int  a;
		int b;
		int c;
	} arg;
} A;


void func(void *p)
{
	int *a;  // 第一个void * 当成了int * 
	a = (int*)p;
	printf("打印地址   func----:   %p\n",a);
	printf("输出      a==   %d\n",*a);

	printf("**********************************************  \n");
	
	A*b;  // void * p 当成了A 结构体类型
	b = (A*)p;
	printf("打印地址   func----:   %p, %p, %p, %p\n,", &b->m,&b->arg.a, &b->arg.b, &b->arg.c);
	printf("输出 结构体的值    %d, %d, %d,   %d\n",   b->m, b->arg.a, b->arg.b, b->arg.c);
}




int main()
{


	A model;
	model.m = 10;
	model.arg.a = 11;
	model.arg.b = 121;
	model.arg.c= 1;
	// void * 使用参数  
	func((void*)&model);
    return 0;
}

代码:

#if 1 
void  RetInt(int a)  //void 没有返回值
{
	printf("void  RetInt(int a) :  %d\n",a);
	return;
}
void*  RetunInt(int *a)  // void*  返回的是 int *
{
	printf("void*  RetunInt(int *a)  : %d\n", *a);
	return a;
}
void* ReturnChar(char* a)// void* 返回的是char *
{
	printf("void* ReturnChar(char*)  : %s\n", a);
	return a;
}



typedef  struct  // test  void* 做参数
{
	int   m;
	struct arg
	{
		int  a;
		int b;
		int c;
	} arg;
} A;


void func(void *p)
{
	int *a;  // 第一个void * 当成了int * 
	a = (int*)p;
	printf("打印地址   func----:   %p\n",a);
	printf("输出      a==   %d\n",*a);

	printf("**********************************************  \n");
	
	A*b;  // void * p 当成了A 结构体类型
	b = (A*)p;
	printf("打印地址   func----:   %p, %p, %p, %p\n,", &b->m,&b->arg.a, &b->arg.b, &b->arg.c);
	printf("输出 结构体的值    %d, %d, %d,   %d\n",   b->m, b->arg.a, b->arg.b, b->arg.c);
}




int main()
{


	A model;
	model.m = 10;
	model.arg.a = 11;
	model.arg.b = 121;
	model.arg.c= 1;
	// void * 使用参数  
	func((void*)&model);

	printf("=================================  \n");

	int a = 10;
	int *n;  // 返回值RetunInt(int* );
	char str[15] = "test_void*";
	char *strp;  // 返回值 void* ReturnChar(char* a)
	RetInt(a);
	printf("=================================  \n");
	n = (int*)RetunInt(&a);
	printf("RetunInt(&a) : %d\n",*n);
	printf("=================================  \n");

	strp = (char*)ReturnChar(str);
	printf("void* ReturnChar(char* a)) : %s\n", strp);
	system("pause");
	return 0;
}
# endif 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值