void关键字的使用规则:算法
1. 若是函数没有返回值,那么应声明为void类型编程
2. 若是函数无参数,那么应声明其参数为void函数
3. 若是函数的参数能够是任意类型指针,那么应声明其参数为void * spa
4. void不能表明一个真实的变量指针
void真正发挥的做用在于:code
规则一: 若是函数没有返回值,那么应声明为void类型对象
咱们在编写C/C++程序时,对于任何函数都必须一个不漏地指定其类型。若是函数没有返回值,必定要声明为void类型。这既是程序良好可读性的须要,也是编程规范性的要求。另外,加上void类型声明后,也能够发挥代码的“自注释”做用。代码的“自注释”即代码能本身注释本身。blog
规则二:若是函数无参数,那么应声明其参数为void内存
规则三:若是函数的参数能够是任意类型指针,那么应声明其参数为void * 原型
典型的如内存操做函数memcpy和memset的函数原型分别为:
void * memcpy(void *dest, const void *src, size_t len); void * memset ( void * buffer, int c, size_t num );
这样,任何类型的指针均可以传入memcpy和memset中,这也真实地体现了内存操做函数的意义,由于它操做的对象仅仅是一片内存,而不论这片内存是什么类型。
再如,交换两个变量:
void swap(void* lsh, void* rhs, size_t size) { ;// }
有了这样一个函数,那么若是想要交换两个变量,那就能够:
swap(&ai, &bi, sizeof(int)); swap(&af, &bf, sizeof(float));
当心使用void *
众所周知,若是指针p1和p2的类型相同,那么咱们能够直接在p1和p2间互相赋值;若是p1和p2指向不一样的数据类型,则必须使用强制类型
float *p1; int *p2; p1 = (float *)p2;
而void *则不一样,任何类型的指针均可以直接赋值给它,无需进行强制类型转换:
void *p1; int *p2; p1 = p2;
void*和其余指针同样,都是占一样大小的内存空间,惟一和其余指针不一样的就在于你不能对void*进行解引用,看起来其余类型的指针均可以用void*来代替,只要在解引用以前把它转换为相应类型的指针就OK了!
不能对void指针进行算法操做,即下列操做都是不合法的:
void * pvoid; pvoid++; //ANSI:错误 pvoid += 1; //ANSI:错误
ANSI标准之因此这样认定,是由于它坚持:进行算法操做的指针必须是肯定知道其指向数据类型大小的。
规则四:void不能表明一个真实的变量
下面代码都企图让void表明一个真实的变量,所以都是错误的代码:void a; //错误function(void a); //错误