gpt4 book ai didi

c - 在 C : Is void* a type?

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:47 24 4
gpt4 key购买 nike

在一些讨论中声称 void* 是“指向 void 对象的指针”,但在 C 标准 6.5.3.4 中,第 2 点是这样写的:“sizeof 运算符产生大小(以字节为单位)......大小由操作数的类型确定。”所以说函数 sizeof() 接收一个类型作为参数。

所以编译器认为 void* 是一种类型?还是使用 * 仅用于语义解释?

最佳答案

void * 是具有已知大小的有效类型。它指向的是某些类型未知的对象或有效的未类型化内存(即从 malloc 返回的内存)。因此 sizeof(void *) 是一个有效的表达式。

6.5.3.4 第 1 段规定:

The sizeof operator shall not be applied to an expression that has function type or an incomplete type, to the parenthesized name of such a type, or to an expression that designates a bit-field member. The _Alignof operator shall not be applied to a function type or an incomplete type.

因为 void * 不是不完整类型,所以 sizeof(void *) 是有效的。但是,由于void类型不完整,sizeof(void)无效。

解决您对 void ** 的评论,这也是指向 void * 类型对象的有效类型。

GCC 等一些编译器实现了一个扩展,其中 void 的大小为 1 ,因此 sizeof(void) == 1void 上的指针算法* 的功能类似于 char * 的算术运算。然而,这违反了标准。

关于c - 在 C : Is void* a type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55268495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com