gpt4 book ai didi

将 int 指针转换为 char ptr,反之亦然

转载 作者:太空狗 更新时间:2023-10-29 16:35:53 24 4
gpt4 key购买 nike

问题很简单。据我了解,GCC 认为在 32 位环境中 chars 是字节对齐的,ints 是 4 字节对齐的。我也知道 C99 标准 6.3.2.3,它说在未对齐的指针类型之间进行转换会导致未定义的操作。 C 的其他标准对此有何看法?这里还有许多经验丰富的编码人员 - 对此有任何看法都将不胜感激。

int *iptr1, *iptr2;
char *cptr1, *cptr2;

iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;

最佳答案

C 只有一个标准(ISO 制定的标准),有两个版本(1989 和 1999),外加一些非常小的修订。所有版本和修订都同意以下内容:

  • 所有数据内存都是字节寻址的,chars是字节
  • 因此 char* 将能够寻址任何数据
    • void*char* 相同,只是与它之间的转换不需要类型转换
  • int* 转换为 char* 始终有效,转换回 int*
  • 也是如此
  • 不能保证将任意 char* 转换为 int* 有效

保证 char 指针像这样工作的原因是,例如,您可以将整数从内存中的任何位置复制到内存或磁盘中的其他位置,然后再返回,事实证明这是一件非常有用的事情低级编程,例如图形库。

关于将 int 指针转换为 char ptr,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291048/

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