将Int值分配给* Char指针

时间:2019-09-14 21:44:12

标签: c pointers types reference int

我正在研究指针算术,而我的教授则使用如下代码:

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

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

如何在没有警告的情况下运行它?我不认为在自己的计算机上复制简单的课程资料就这么困难。

1 个答案:

答案 0 :(得分:1)

您正在尝试将类型变量放入另一个变量。由于两者都是指针,因此编译器可以做到这一点,但是警告您可能由此导致的不确定行为影响。

如果要忽略它,某些编译器具有选项。 gcc为此选择了-Wno-incompatible-pointer-types

但是最好的方法是强制强制转换:

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

请注意,不能保证这样做:

*(y+1) = 0x02;

x变成0x01020000。只有在满足两个条件的情况下,它才会这样做:

  • 计算机是 big endian
  • int的大小为32位

因此,您看到,使用指针强制转换需要您确切地知道自己在做什么,否则您可能会遇到未定义的行为