我正在研究指针算术,而我的教授则使用如下代码:
int x = 0x01000000;
char *y = &x;
*(y+1) = 0x02;
使x变为0x01020000,但即使第2行也无法在我的系统上编译,这给了我这个错误:warning: incompatible pointer types initializing 'char *' with an expression of type 'int *'
如何在没有警告的情况下运行它?我不认为在自己的计算机上复制简单的课程资料就这么困难。
答案 0 :(得分:1)
您正在尝试将类型变量放入另一个变量。由于两者都是指针,因此编译器可以做到这一点,但是警告您可能由此导致的不确定行为影响。
如果要忽略它,某些编译器具有选项。 gcc
为此选择了-Wno-incompatible-pointer-types
。
但是最好的方法是强制强制转换:
int x = 0x01000000;
char *y = (char*)&x;
请注意,不能保证这样做:
*(y+1) = 0x02;
将x
变成0x01020000
。只有在满足两个条件的情况下,它才会这样做:
int
的大小为32位因此,您看到,使用指针强制转换需要您确切地知道自己在做什么,否则您可能会遇到未定义的行为。