【发布时间】:2023-03-26 22:54:01
【问题描述】:
我正在研究指针算术,我的教授使用这样的代码:
int x = 0x01000000;
char *y = &x;
*(y+1) = 0x02;
将 x 变为 0x01020000,但即使第 2 行也无法在我的系统上编译,给我这个错误:warning: incompatible pointer types initializing 'char *' with an expression of type 'int *'
我怎样才能让它在没有警告的情况下运行?我没想到在我自己的电脑上复制简单的课堂材料会这么难。
【问题讨论】:
-
char *y = (char *)(&x)呢?刚投。请注意,您不会在 little endian 系统上获得您想要的结果... -
请注意,这“只是”一个警告。你的教授显然不关心他们。但是除非你在一个大端机器上运行,使用 32 位整数你不会得到 0x1020000 而是 0x01000002
-
@Jean-FrançoisFabre 我将如何忽略该警告?
-
@Jean-FrançoisFabre:在 little-endian C 实现中,会得到 0x01000200,而不是 0x01000002。后者需要“混合端”实现。
-
@JohnDoe 它允许转换为任何指针类型。任何指针类型都可以转换为
void *并返回。
标签: c pointers types reference int