gpt4 book ai didi

c - 为什么这个 uint32_t 转换在 iPhone 模拟器和 iPhone 设备上的行为不同?

转载 作者:行者123 更新时间:2023-12-03 20:25:00 26 4
gpt4 key购买 nike

为什么以下代码在 iPhone 模拟器和设备上的行为不同?我在 intel macbook pro 上运行模拟器,设备是 iPhone 5(型号 MD297KS/A)。

代码:

uint8_t original = 23;
uint8_t * pointerToOriginal = &original;
uint32_t * casted = (uint32_t *)pointerToOriginal;
printf("original: %u\ncasted: %u\n", original, *casted);

在模拟器上运行时的输出:

original: 23
casted: 23

在设备上运行时的输出:

original: 23
casted: 2755278871

我假设转换会导致垃圾数据包含在转换的整数中,因此设备输出对我来说有意义,但是为什么整数不受模拟器上转换中引入的额外数据的影响?

最佳答案

来自C11 standard "6.3.2.3-7" :

A pointer to an object type may be converted to a pointer to a different object type. If the resulting pointer is not correctly aligned for the referenced type, the behavior is undefined. ...

来自C11 standard "J.2" :

The behavior is undefined in the following circumstances: ...

  • Conversion between two pointer types produces a result that is incorrectly aligned (6.3.2.3).

强调我的

关于c - 为什么这个 uint32_t 转换在 iPhone 模拟器和 iPhone 设备上的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39201521/

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