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

use*_*964 7 c assembly pointers dereference

我知道:char*是一个指向char的指针.和int*是指向int的指针.

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

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

  2. 假设我有:int*ptr;

因此现在做*((char**)ptr)= 0x154与*((int*)ptr)= 0x514相同,对吧?(0x514只是任意随机存储器地址)

平台:我在x86上.

PS:我知道类型转换不是建议的代码方式.但我正在做内核编码,因此我必须做类型转换!

shf*_*301 12

在C指针中不保证具有相同的大小.现在实际上大多数实现指针都是相同的大小,但这是编译器的实现细节.

来自C Faq:

旧的HP 3000系列使用不同的字节地址寻址方案而不是字地址; 像上面的几台机器一样,它使用char*和void*指针的不同表示而不是其他指针

根据使用的"内存模型",8086系列处理器(PC兼容机)可能使用16位数据指针和32位函数指针,反之亦然.

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