CC++语言void及void指针深层探索
1.概观
很多初学者对C/C++语言中的void和void指针类型不了解,所以在使用中会出现一些错误。本文将解释void关键字的深刻含义,并阐述使用void和void指针类型的方法和技巧。
2.2.void的含义
Void字面意思是“无类型”,而void *的意思是“无类型指针”。void *可以指向任何类型的数据。
Void几乎只有“注释”和限制程序的功能,因为从来没有人定义过void变量。让我们试着定义一下:
作废a;
当这一行被编译时,会出现一个错误,提示“非法使用类型‘void’”。但是,即使void a编译无误,也没有实际意义。
void的真正作用在于:
(1)函数返回的限制;
(2)函数参数的限制。
以上两点我们会在第三节详细讲解。
众所周知,如果指针p1和p2是同一类型,那么我们可以直接在p1和p2之间互相赋值;如果p1和p2指向不同的数据类型,则必须使用cast运算符将赋值运算符右侧的指针类型转换为左侧的指针类型。
例如:
float * p1
int * p2;
P1 = p2;
p1 = p2语句编译时将出现错误,提示“' = ':无法从' int * '转换为' float * '”,必须将其更改为:
P1 =(float *)p2;
Void *不一样。任何类型的指针都可以直接赋给它,无需强制类型转换:
void * p1
int * p2;
P1 = p2;
但这并不意味着void *也可以赋给其他类型的指针,而不需要强制类型转换。因为“非类型化”可以包含“类型化”,而“类型化”不能包含“非类型化”。原因很简单。我们可以说“男人女人都是人”,但不能说“人是男人”或“人是女人”。编译以下语句时出错:
void * p1
int * p2;
p2 = P1;
提示“' = ':无法从' void * '转换为' int * '。
0条评论