void修饰函数返回值和参数:
1.如果函数没有返回值,则应将其声明为void类型。
c语言中凡不加返回值类型的,就会被编译器作为返回整型值处理,然而好多程序员会将其误认为void类型。
为了避免混乱,我们在编写c程序时,对于任何函数都必须一个不漏地指定其类型,如果函数没有返回值,那么一定要声明void类型。即可增减程序的可读性,也是编程规范要求。还可以发挥代码的自注释功能。
void指针:
按照ANSI标准,不能对void指针进行算法运算。ANSI标准规定,进行算法操作的指针必须是确定知道其指向数据类型大小的。也就是说必须知道内存目的地址的确切值。下列操作是不合法的。
void *p;
p++;
p += 1;
但是GNU则认为void *的算法操作和char* 一致。因此上述的操作在GNU标准里是正确的。GNU和ANSI还有一些区别,GUN比ANSI更开放,提供了对更多语法的支持,但是真实设计时还是应该尽可能符合ansi标准。
2.如果函数参数的返回值为任意类型,那么应声明其参数为void *。
如下内存操作函数原型:
void *memcpy(void *dest, const void *src, size_t len);
void *memset(void *buffer, int c, size_t num);
这样任何类型的指针都可以传入该函数,这也真实体现了内存操作函数的意义。因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。
注意:
void不能定义变量,例如void a;是错误的。function(void a);也是错误的。