将 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 位大小
所以你看,玩指针转换需要你确切地知道你在做什么,否则你可能会遇到未定义的行为。
我正在学习指针运算,我的教授使用这样的代码:
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 位大小
所以你看,玩指针转换需要你确切地知道你在做什么,否则你可能会遇到未定义的行为。