gpt4 book ai didi

在 c 中打印时类型转换指针差异

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:35 24 4
gpt4 key购买 nike

考虑代码:

int main() {
char orange[5];
for (int i = 0; i < 5; i++)
orange[i] = 1;
printf("orange: %d\n", *((char *)orange));
printf("orange: %d\n", *((int *)orange));
return 0;
}

第一个打印语句为我提供了一个值 1,但是第二个打印语句为我提供了一个值 16843009。差异的原因是什么?

最佳答案

在第二个中,您将一些相邻的 char别名化int。根据 C 标准,这是未定义的;然而,一个常见的结果是您将获得 int 的值,它具有与连接的那些 char 值的位模式相同的位模式。

在这种情况下,您看到的值是 0x01010101 的十进制形式。

这是未定义的行为,因为 C99 6.5#7 列出了可能有别名的有效类型组合,而 char as int 不在列表中。 (您可以int 别名为char,但反之则不行)。 See here获取标准文本。

由于对齐要求,还有潜在的未定义行为。例如,某些系统要求只能在 4 的倍数的地址访问 int

关于在 c 中打印时类型转换指针差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378204/

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