【发布时间】:2020-08-07 15:13:24
【问题描述】:
#include<stdio.h>
void main()
{
int a,b;
char *cp;
a=511;
cp=&a;
b=*cp;
*cp=10;
printf("%d %d %d",a,b,*cp);
}
它在 gcc 中发出 266 -1 10 警告:从不兼容的指针类型 'int *' [-Wincompatible-pointer-types] 分配给 'char *' cp=&a; 我知道 cp 是一个字符指针,所以它给了我一个警告。
我无法理解 a 和 b 的输出;
【问题讨论】:
-
将 int 分配给 char 时的窄转换。这是一个不安全类型转换的例子。
-
该输出表明您在 little-endian 系统上运行了代码。在大端系统上,输出会有所不同。这就是警告的原因。代码已损坏,应在运行前修复。
-
如果你使用十六进制表示,你可能会得到更有趣和清晰的画面。
-
@user3386109:嗯,警告的原因是他从不兼容的指针类型'int *'分配给'char *'。即他需要一个演员表。该代码是不可移植的,而不是损坏的。好吧,它现在坏了,但如果他修好了,它就不能移动了:-)