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

问题很简单。 据我所知,GCC认为chars将在32位环境中以字节对齐并且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指针保证像这样工作的原因是,例如,你可以将整数从内存中的任何位置复制到内存或磁盘中的其他位置,然后返回,这在低级别中是非常有用的事情编程,例如图形库。


    CPU有大端和小端,所以结果是不确定的。 例如,转换后的char指针0x01234567的值可能为0x12或0x67。


    你可以试着做:

    iptr1 = atoi(cptr1); // val now = pointed by cptr1
    cptr2 = atoi(iptr2); // val now = pointed by iptr2
    

    这在DevCpp中适用于我!

    链接地址: http://www.djcxy.com/p/40383.html

    上一篇: Casting an int pointer to a char ptr and vice versa

    下一篇: Is `long` guaranteed to be at least 32 bits?