gpt4 book ai didi

c - 转换指针 'actually' 在幕后做了什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:49 30 4
gpt4 key购买 nike

假设我有以下 C 代码:

int* vector = (int*)malloc(5 * sizeof(int));

malloc 返回一个空指针,因为不知道要求为什么分配空间。

因此,我们将 void 指针转换为 int 指针。

转换实际上在运行时做任何事情,还是只是编译所需要的?如果它在运行时工作,它在做什么?

最佳答案

在编译时需要对指针进行转换,但指向 void 的指针除外,它可以在不显式转换的情况下与指向任何类型的指针相互转换。

除了指向 char 的指针和指向 void 的指针需要具有相同的表示之外,语言没有指定运行时发生的事情。对于剩下的,唯一需要的是(6.3.2.3 转换/指针§ 7)指向对象或不完整类型的指针可以转换为指向不同类型的指针对象或不完整的类型。如果生成的指针没有正确对齐指向类型,行为未定义。否则,当再次转换回来时,结果应比较等于原始指针

但是在常见的体系结构上,指向任何对象的指针的表示是其第一个字节的地址。因此,运行时的指针转换是空操作。

关于c - 转换指针 'actually' 在幕后做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31877391/

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