【发布时间】:2013-02-01 12:22:56
【问题描述】:
我知道: char * 是指向 char 的指针。 和 int * 是一个指向 int 的指针。
所以,我想确认以下两件事:
所以现在假设我在 32 位机器上,那么这意味着内存地址是 32 位宽的。 因此,这意味着 char * 和 int * 的大小都是 32 位(4 个字节),对吧? char * * 的大小是否也与 int * 的大小相同?
假设我有: int * ptr;
因此现在 *((char * *) ptr) = 0x154 与 *((int *) ptr) = 0x514 相同,对吧? ( 0x514 只是任何随机内存地址)
平台:我在 x86 上。
P.S.:我知道类型转换不是建议的编码方式。但是我正在做内核编码,因此我必须进行类型转换!
【问题讨论】:
-
即使标准没有说出来,我怀疑要找到一个真正不同的环境会很容易。
-
虽然它们的大小在实践中是相同的,但它们的对齐要求却不同。
-
如果你在做“内核编码”,那已经限制了代码可以运行的平台数量。查看操作系统规范支持的内容。
标签: c pointers assembly dereference