-
void
关键字的使用规则是什么?- 如果函数没有返回值,那么应声明为
void
类型; - 如果函数无参数,那么应声明其参数为
void
;(常省略) - 如果函数的参数或返回值可以是任意类型指针,那么应声明其类型为
void*
; -
void
的字面意思是“无类型”,void*
则为“无类型指针”(其实是任意类型指针),void
不能代表一个真实的变量,void
体现了一种抽象。
- 如果函数没有返回值,那么应声明为
-
void a;
这条语句是否正确?
不正确,并且会提示illegal use of type ‘void’
错误。记住void
几乎只有"注释"和限制程序的作用。 -
深度辨析一下
void *
?- 对于
void*
,任何类型的指针都可以直接赋值给它,并且无需进行强制类型转换。void *p1; int *p2; p1 = p2; //将int型指针赋值给void型指针,合法!
- 对于
void*
,它赋值给其他类型的指针,需要进行显式转换。void *p1; int *p2; p2 = (int*)p1; // //以下为错误用例,不能直接将void型指针赋值给int型指针 p2 = p1;
- 在 ANSI C 标准中,不允许对
void
指针进行一些算术运算,而在 GNU 中则允许。void * pvoid; pvoid++; //ANSI:错误 pvoid++; //GNU:正确
- 对于
-
举一个关于
void*
的例子?
eg:典型的如内存操作函数 memcpy 和 memset 的函数原型。void * memcpy(void *dest, const void *src, size_t len); void * memset ( void * buffer, int c, size_t num );
解释:
任何类型的指针都可以传入memcpy
和memset
中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型(参见 C 语言实现泛型编程)