我知道:char *是一个指向char的指针。 和int *是指向int的指针。
所以,我想确认以下两件事:
因此现在做*((char * *)ptr)= 0x154与*((int *)ptr)= 0x514相同,对吧? (0x514只是任意随机存储器地址)
平台:我在x86上。
PS:我知道类型转换不是建议的代码方式。 但我正在做内核编码,因此我必须做类型转换!
在C指针中不保证具有相同的大小 。 现在实际上大多数实现指针的大小都相同,但这是编译器的实现细节。
来自C Faq :
旧的HP 3000系列使用不同的字节地址寻址方案而不是字地址; 比如上面的几台机器因此对char *和void *指针使用不同于其他指针的表示
根据使用的“内存模型”,8086系列处理器(PC兼容机)可能使用16位数据指针和32位函数指针,反之亦然。
此外*((char *)ptr) = 0x154
与*((int *)ptr) = 0x154
。 因为您要取消引用指针,所以您将把char
的大小和int
的大小写入ptr
指向的位置。 假设一个8位字符和一个32位int, *((char *)ptr) = 0x154
将*((char *)ptr) = 0x154
写入分配给ptr
的内存地址和*((int *)ptr) = 0x154
将0x0000000154
写入4字节开始在分配给ptr
的地址。
从技术上讲,C标准只保证sizeof(char)== 1,其余的由实现决定。 但在现代x86架构(例如Intel / AMD芯片)上,它是相当可预测的。
您可能听说过处理器被描述为16位,32位,64位等。这通常意味着处理器使用N位作为整数。 由于指针存储内存地址,而内存地址是整数,因此这有效地告诉您将使用多少位作为指针。 sizeof通常以字节为单位,因此为32位处理器编译的代码将报告指针大小为4(每位32位/ 8位),64位处理器的代码将报告指针大小为8 (每字节64位/ 8位)。 这就是32位处理器4GB RAM的限制来自 – 如果每个存储器地址对应一个字节,为了满足更多存储器需要大于32位的整数。
实际上,指针在16位系统上的大小为2(如果你能找到一个),在32位系统上是4,在64位系统上是8,但是依靠给定的东西没有任何好处。尺寸
以上就是c/c++开发分享char *的大小是否与int *的大小相同?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545776.html