c语言重载函数声明,用C语言来实现的类似C++函数的重载特性

我们在使用C库函数的时候经常会碰到使用void*指针的现象,以前本人作为初学者并不太明白其中的奥妙,相信很多初学者跟我有同感。

我认为这些void*的使用恰恰很巧妙的实现了函数的“重载”特性 。

典型的如内存操作函数memcpy和memset的函数原型分别为:

void * memcpy(void *dest, const void *src, size_t len);

void * memset ( void * buffer, int c, size_t num );

它们的void*都可以接受任意类型指针,例如

int i[50];

memset ( i, 0, 50*sizeof(int) ); //将intarray清0

char a[50],b[50];

memcpy ( a, b, 50*sizeof(char) ); //将b拷贝给a

我们看到void*就像一个万能的指针,来什么我就处理什么,当然函数内部的处理是关键,但是这种方法还是值得我们学习的。

关键是利用了任何类型的指针均可以对void*赋值的特性;即:

void* p;

char *s;

int *i;

p = s;//将s地址赋给p

p = i;//将i地址赋给p

但是,当要把void*赋给其他指定类型的指针时,需要将其强制转换,这点我们在使用的时候应该注意;

如上例:

s = p;//编译错误,

s = (char*) p;//正确

p++;//错误

(char*)p++;//正确

(char*) p+=1//错误

有趣的是,memcpy和memset函数返回的也是void *类型,当然这也是写一个“纯粹的,脱离低级趣味的”函数所必须的!

这样,任何类型的指针都可以传入memcpy和memset中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。

我们的实际运用当中可以有所借鉴,当有几个功能相同而仅仅参数类型不同的函数时,我们可以将它们并到一个用void*指针作参数的函数中,可以提高程序的可读性。

当然这仅仅是对C语言而言,C++中我们就别浪费精力在这儿了。^_~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值