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;//编译错误,