关于C与C++的零散知识(1)

关于在标准C中的(void*)作为传递参数和返回类型的问题

(void )可以被看成一个泛型,泛型的意思就是说我们可以向其中传递任何类型的数据,可以在运行时为其动态指派特定的类型。在(void)被作为一个参数的时候,在调用该函数的时候可以向其中传递任意类型的参数(注意:参数必须是指针类型的变量)。从这一点上来看它的功能比较类似C++中的模板。

不过若是将void*赋值给其他类型的参数,那么需要进行类型转换。

从语法上来说,(void*)是一个空指针类型,他不指向任何类型,仅仅是个地址而已,所以它不能进行自加或者自减运算

例:
void *p; //仅仅表示p存放一个地址;
p++; //error!+,-运算离不开指针类型;
*p=2; //error!必须指明类型

int a=1;
p=&a; //正确;
a=(int *)p //正确;

如果(void*)作为一个函数的返回值,那么可以将它认为它可以返回任意类型的指针。同样的,在调用函数中我们也应该定义一个void类型的指针用于接受void类型的返回值,同理,在使用它或者输出它时,要将其转化为对应类型的指针才可以使用。以下是一个简短的例子。

#include <stdio.h>

void Number1(void *a)
{
	int *num;
	num=(int *)a;
	printf("%d\n",*num);
}


void String(void *s)
{
	char *s1;
	s1=(char *)s;
	printf("%s",s1);
}


void *Number(void *a)
{
	int *num;
	num=(int *)a;
	return num;
}



void main()
{
	int a=10;
	void *b;
	char *ch="String";
	b=Number(&a);
	printf("%d\n",*((int *)b));
	String(ch);
}

相信这个例子已经足够的详细了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值