void类型
《般若波罗密多心经》中曾经提到过“舍利子,色不异空,空不异色,色即是空,空即是色”。“空即是色”这是一个又被滥用的成语,却刚好点破了void这个空类型的指针却可以用来指向任何类型的变量,但是这里刚好可以拿来介绍一下void类型的用途。
问题描述:
在C语言的定义中,并没有void这样的一个数据类型,可是这个void却频繁的出现在了本来应该是数据类型才应该出现的地方,那么到底void是什么呢?
实例分析:
void严格来说并不是一个数据类型。void的作用主要是为了完善语法。实际上并不能使用void去定义任何一个变量。
例如 void a;
这样系统会报错,因为void类型为空,也不会占用任何空间,这样的话,变量a不会对应任何内存,这样即使分配成功,也不会有任何意义。因此C标准干脆规定不允许进行这样的定义。
void的第一个作用是指示一个无类型的指针,这个本来是空类型的指针却可以指示所有类型的数据(“空即是色”?)。
尤其是当我们想要编写一个函数的参数值可以是任意类型指针,那么应声明其参数为void *
虽然我们不能定义一个void类型的变量,但是我们却可以定义一个指向void类型的指针void*。
比如 void* p;这个定义就是正确的。
int _tmain(int argc, _TCHAR* argv[]) { void* p; int a; p=&a; return 0; } |
深入剖析:
不能将指向不同类型的指针相互赋值,但是void类型的指针却可以被任何类型的指针赋值。
void的第一个作用就是和指针相结合使用
1空指针可以用来判断指针的合法性
2用来指向任意类型的数据
3作为函数参数。
void的第二个作用是作为函数的参数和函数的返回值。
参数列表中C语言()和(void)的含义是完全不一样的,()表示的可以有任意的参数,(void)表示的是没有参数。这和C++不同。