将 Int 值赋给 *Char 指针

Assigning Int value to *Char pointer

我正在学习指针运算,我的教授使用这样的代码:

int x = 0x01000000;
char *y = &x;
*(y+1) = 0x02;

将 x 变成 0x01020000,但即使是第 2 行也无法在我的系统上编译,给我这个错误:warning: incompatible pointer types initializing 'char *' with an expression of type 'int *'

如何在没有警告的情况下将其发送到 运行?我不认为在我自己的计算机上复制简单的 class material 会这么难。

您正在尝试将一种类型的变量放入另一种类型。由于两者都是指针,编译器 可以 执行此操作,但会警告您可能由此产生的未定义行为影响。

如果你想忽略它,一些编译器有选项。 gcc-Wno-incompatible-pointer-types 选项。

不过最好的办法还是强制转换:

int x = 0x01000000;
char *y = (char*)&x;

附带说明一下,不能保证这样做:

*(y+1) = 0x02;

x变为0x01020000。只有满足两个条件,它才会这样做:

  • 机器是 big endian
  • int 是 32 位大小

所以你看,玩指针转换需要你确切地知道你在做什么,否则你可能会遇到未定义的行为