一个关于C语言程序设计的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 04:33:49
本人初学C语言,碰到一个问题,望大家帮忙
一个程序
main()
{
int a=2,b=6;
printf("%lx\t%lx",&a,&b);
}
显示的是ffd8ffd6 60002
但是让他们分开显示
main()
{
int a=2,b=6;
printf("%lx\t",&a);
printf("%lx\t",&b);
}
就变成了2ffd6 2ffd8
为什么两次不一样?
code_dump:
把这三个语句放在一个main里也是这个结果
oo黑夜oo:
用turboc2.0试试
newkedison 和tanarri:
turboc2.0
peterhac:
我引用了stdio.h
按你的说法改成这样
#include<stdio.h>
main()
{
int a=2,b=6;
printf("%lx\t%lx\t",&a,&b);
printf("%lx\t",&a);
printf("%lx\t",&b);
}
这次的结果是ffd8ffd6 60002 2ffd6 2ffd8

如果是 printf("%x\t%x",&a,&b);
那么结果是 ffd6 ffd8
如果是 printf("%lx",&a,&b);
结果是 ffd8ffd6
如果是printf("%lx\t%lx",&a,&b);
显示的是ffd8ffd6 60002 后面60002是多出的部分

实际应该是,a的地址为ffd6,b为ffd8,超出的部分为2,6,....

可以看到用lx直接一次显示了a和b的地址,低位先显示,高位后显示,后面再来个lx就是多出的部分了,后面接着的是2,和6,

至于为什么这样,要看TC的内存分配和printf的详细内容了

我用VC++6.0运行,两次都一样啊,都是地址

恭喜你发现某个编译器的BUG了,不知道你用的是哪个编译器?

不应该有什么问题,你用什么编译的?

变量的地址是运行时分配的,你编译的程序在不同的电脑上运作结果都有可能不同

你有引用stdio.h包吗?(#include "stdio.h")
再来,%lx格式符是输出长整型的,你定义的只是int型罢了~~
但为什么两次不一样我就不知道了,还望大虾指教~~

printf("%lx\t%lx*",&a,&b);
你在我加*号的位置加上/t再试试~~