c语言学习---void 数据类型
这样的语法是错误的: void a = 10; void表示无类型, 这样定义一个变量a, 编译器是无法知道给a分配多大的内存空间的
#include<stdio.h> #include<stdlib.h> // 1. void 限定函数的返回值, void 函数没有返回值 void function1()//表示这个函数是没有返回值的 { printf("hello world"); } int main() { function1(); return 0; }
hello world
#include<stdio.h> #include<stdlib.h> //可以不定义函数的类型 function1() { return 10; } int main() { int a; a = function1(); printf("%d",a); return 0; } 10
#include<stdio.h> #include<stdlib.h> //定义了void, 无返回值, 但是最后还是有return ,这样调用函数function1()的时候虽然不会报错, 但是不建议这样使用 void function1() { return 10; } int main() { function1(); return 0; }
2. 限定函数的传参列表
#include<stdio.h> #include<stdlib.h> int function1() { return 10; } void function2() { printf("%d, ",function1()); } int main() { function2(); return 0; } 10 #include<stdio.h> #include<stdlib.h> int function1() { return 10; } void function2() { printf("%d, ",function1(110));//function1()函数没有传参, 但是这里传参, 但是不会报错, 输出的还是10 } int main() { function2(); return 0; } 10 #include<stdio.h> #include<stdlib.h> int function1(void) //在这里加上一个void, 表示没有传参 { return 10; } void function2() { printf("%d, ",function1(110));//function1()加上void 变成function1(void), 这个时候再这样调用function1(void)就会报错, 因为void已经表示无传参了 } int main() { function2(); return 0; }
3. void * 万能指针, 可以不需要强制类型转换就可以给等号左边赋值
比喻说
int* pInt = NULL;
char* pChar = NULL;
// 将pChar复制给pInt
pInt = pChar //这样会报错, 因为指针类型不一样
pInt = (int*)pChar //使用(int*) 进行强制类型转换
//但是可以定义一个万能指针
void* pVoid = NULL;
pChar = pVoid //万能指针, 可以不需要强制类型转换就可以给等号左边赋值
#include<stdio.h> #include<stdlib.h> int main() { int* pInt = NULL; char* pChar = NULL; void* pVoid = NULL; pChar = (char*) pInt; pChar = pVoid; printf("%p", pChar); return 0; }