将Int值赋给*Char指针

将Int值赋给*Char指针,c,pointers,types,reference,int,C,Pointers,Types,Reference,Int,我在学习指针算法,我的教授使用的代码如下: int x = 0x01000000; char *y = &x; *(y+1) = 0x02; 将x转换为0x01020000,但即使是第2行也无法在我的系统上编译,这给了我以下错误:警告:不兼容的指针类型使用类型为“int*”的表达式初始化“char*” 我如何在没有警告的情况下运行它?我没想到在我自己的电脑上复制简单的课堂材料会这么难。你试图将一种类型的变量放入另一种类型。由于这两个都是指针,编译器可以这样做,但会警告您可能由此产生的未

我在学习指针算法,我的教授使用的代码如下:

int x = 0x01000000;
char *y = &x;
*(y+1) = 0x02;
将x转换为0x01020000,但即使是第2行也无法在我的系统上编译,这给了我以下错误:警告:不兼容的指针类型使用类型为“int*”的表达式初始化“char*”


我如何在没有警告的情况下运行它?我没想到在我自己的电脑上复制简单的课堂材料会这么难。

你试图将一种类型的变量放入另一种类型。由于这两个都是指针,编译器可以这样做,但会警告您可能由此产生的未定义的行为影响

如果您想忽略它,有些编译器有选项。gcc有-Wno不兼容的指针类型选项

但最好的办法是强迫演员:

int x = 0x01000000;
char *y = (char*)&x;
作为旁注,不能保证:

*(y+1) = 0x02;
将x转换为0x01020000。只有在满足以下两个条件的情况下,才会这样做:

机器是大端机 int的大小为32位
因此,使用指针强制转换需要您确切地知道自己在做什么,否则您可能会遇到未定义的行为。

char*y=char*&x呢?就投吧。请注意,在一个小小的endian系统上,您不会得到想要的结果……请注意,这只是一个警告。你的教授显然不关心他们。但除非你在一台big-endian机器上运行,否则你不会得到0x1020000,而是会得到一个32位整数0x01000002@Jean-FrançoisFabre我怎么能忽略这个警告?@Jean FrançoisFabre:在一个小小的endian C实现中,一个将得到0x01000200,而不是0x01000002。后者需要一个“混合endian”实现。@JohnDoe它允许对任何指针类型进行强制转换。任何指针类型都可以转换为void*并返回。