C语言学习笔记--void关键字
1.C语言中Void关键字的含义
void 修饰函数返回值和参数——为了表示“无”,如果函数没有返回值,那么应该将其声明为 void,同样的,如果函数没有参数,也应该声明其参数为 void
//f()函数任意参数,返回值默认 f() { } //函数无参无返回值 void f(void) { }
2.C语言中不存在 void 变量
C 语言没有定义 void 究意是多大内存的别名,没有 void 标尺,无法在内存中裁出大小
#include<stdio.h> int main() { void var;//error,不能定义 void 型的变量 void array[5];//error,不能定义 void 型的变量 //在 ANSI C 编译器中无法通,支持 GNU 标准的 gcc 下为 void 大小为 1,是合的 void* pv;可以定义void*的指针 printf("sizeof(void)=%d\n",sizeof(void)); }
3.void 指针
(1)C 语言规定只有相同类型的指针才可以相互赋值
(2)void* 指针作为左值用于“接收”任意类型的指针
(3)void* 指针作为右值使用时需要进行强制类型转换
int* pI = (int*)malloc(sizeof(int)); char* pC = (char*)malloc(sizeof(char)); void* p = NULL; int* pni = NULL; char* pnc = NULL; p =pI; //ok,void*指针 p 可接收任何类型的指针 pni= p; //error,void*须强制类型转换,即 pni =(int*)p; p =pC; //ok pnc= p; //error,应为 pnc=(char*)p;
通过 void*实现 MemSet 函数
#include <stdio.h> void MemSet(void* src, int length, unsigned char n) { unsigned char* p = (unsigned char*)src; int i = 0; for(i=0; i<length; i++) { p[i] = n; } } int main() { int a[5];//这里可以是任何其他类型,如 char a[5];double a[5]等。 int i = 0; MemSet(a, sizeof(a), 0); for(i=0; i<5; i++) { printf("%d\n", a[i]); } return 0; }
参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html