CC++语言void及void指针深层探索

CC++语言void及void指针深层探索,第1张

CC++语言void及void指针深层探索,第2张

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 * '。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » CC++语言void及void指针深层探索

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情