void类型及void指针
1>void 类型
void fun(void) { ; }
fun(void) { return 0; }
4.void 真正发挥的作用:
(1)对函数返回的限定
(2)对函数参数的限定
2>void*指针
1. 平时我们所熟知的指针类型都 int* ,char*,而void*可以指向任何类型的数据,包括'\0';这就是实现
memcpy和memmove时使用void*的原因;void*就是“无类型的指针”;
2. 平时我们将指针 p1 赋值给 指针 p2 时需要判断指针类型是否一致,否则将会出错,如果不一致则需要强
制类型转换;例:
.
int *p1; char *p2; p1 = (int*)p2;
当然这样的定义指针而不初始化是有问题的,只是为了举例方便,大家自己写的时候要注意野指针的问题;
而void*则可以随意的接收任何类型的指针,但是其他类型的指针不能随意接收void *的指针,这就是前面说到
的void*是个无类型的的指针,所以它所指向的内容类型是不确定的;
但是这并不意味其他类型的指针无法接受void * 指针,我们不是还有强制类型转换嘛!
void* fun(void* p,void *q) { char *s1 = (char *)p; int *s2 = (int *)q; }
.
“无类型可以包容有类型,而有类型不能包容无类型”,这是引用大牛总结的话,相信我举的例子已经把这句话
诠释了!
3.关于函数无返回值时定义为void 还需强调一下,其实C语言有很严格的类型检查,不会允许函数不加类型声
明的情况发生的, 但是编译器并不是这么严格! 所以函数无返回值时一定要加void 声明;