程序代码:
main()
{
char e,f;
int x,y,z,m,n;
printf("e=%x=%x f=%x=%x x=%x=%x y=%x=%x z=%x=%x m=%x=%x n=%x=%x\n\n",
&e,e,&f,f,&x,x,&y,y,&z,z,&m,m,&n,n);
scanf("%d%d",&y,&z);
scanf("%d%c%d%c",&e,&m,&f,&n);
printf("%d%d%d\n%d%c%d%c\n\n",x,y,z,e,m,f,n);
printf("e=%x=%x f=%x=%x x=%x=%x y=%x=%x z=%x=%x m=%x=%x n=%x=%x\n\n",
&e,e,&f,f,&x,x,&y,y,&z,z,&m,m,&n,n);
getch();
}
如不对x赋值,在输入1 2回车1a2b时。上面程序运行结果如下:
e=地址=十六进值
···
没赋值前:
e=ffcc=b f=ffcd=6a x=ffce=1bab y=ffd0=720 z=ffd2=ffe4 m=ffd4=176c n=ffd6=67ad
赋值后:
e=ffcc=3 f=ffcd=1
x=ffce=1b00 y=ffd0=1
z=ffd2=2
m=ffd4=170a n=ffd6=6761
·
看字符变量f和整型变量x,它们俩的地址是挨在一起的,在%d给f赋值时,f是一字节,而%d是给两字节赋值,把变量x的一个字节也给赋值了,另一字节保持不变.就是说在给f赋值时,引响了变量x。
f没赋值前,x值是:1bab
(内存的一个值,机器不同值不相同)
f赋值后, x值是:1b00
(x的一个字节不高,另一个字节被改动)
输入格式%c也只改动变量m和n的一个字节,上面可以看出。
·
·
所以输入格式要匹配变量来赋值,以免出现上面的错误。
[
本帖最后由 UserYuH 于 2009-9-17 21:02 编辑 ]