gpt4 book ai didi

c - char * 的大小是否与 int * 的大小相同?

转载 作者:太空狗 更新时间:2023-10-29 17:07:18 25 4
gpt4 key购买 nike

我知道:char * 是指向 char 的指针。和int * 是指向 int 的指针。

所以,我想确认以下两件事:

  1. 现在假设我在 32 位机器上,那么这意味着内存地址是 32 位宽。因此这意味着 char * 和 int * 的大小都是 32 位(4 个字节),对吗?char * * 的大小也与 int * 的大小相同吗?

  2. 假设我有:int * ptr;

现在做 *((char * *) ptr) = 0x154 和 *((int *) ptr) = 0x514 一样,对吧?( 0x514 只是任何随机内存地址)

平台:我在 x86 上。

P.S.:我知道类型转换不是推荐的编码方式。但是我正在编写内核代码,因此我必须进行类型转换!

最佳答案

在 C 中指针是 not guaranteed to have the same size .现在实际上大多数实现指针的大小都相同,但这是编译器的实现细节。

来自C Faq :

The old HP 3000 series uses a different addressing scheme for byte addresses than for word addresses; like several of the machines above it therefore uses different representations for char * and void * pointers than for other pointers

Depending on the ``memory model'' in use, 8086-family processors (PC compatibles) may use 16-bit data pointers and 32-bit function pointers, or vice versa.

还有 *((char *)ptr) = 0x154*((int *)ptr) = 0x154 不同.因为您要取消引用指针,所以您将写入大小为 char 的数据。和 int 的大小进入 ptr 指向的位置.假设一个 8 位 char 和一个 32 位 int,*((char *)ptr) = 0x154会写0x154到分配给 ptr 的内存地址和 *((int *)ptr) = 0x154会写0x0000000154从分配给 ptr 的地址开始的 4 个字节.

关于c - char * 的大小是否与 int * 的大小相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913131/

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