C语言中,如何实现输出变量的内存地址,最好能写一段程序看看。
有下面一段C程序,“printf("btf=%xH
",btf);”是输出内存的地址吗?为什么该段程序每次运行时的值都不变,但书上说,不同时刻运行输出的结果会有不同。为什么我用TurboC编译时,不同时刻运行时,输出的结果都是btf=93dH,使用VisualC 编译时,不同时刻运行时,输出的却始终是btf=cccccccdH,重启计算机也如此,别人计算机运行也如此!!!程序运行时不是随机分配内存地址的吗?怎么在不同时刻运行时,该结果还是相同的?为什么不同编译器产生的结果却不同,难道程序分配内存是有编译器决定的吗??如果那些输出的不是地址值,那都是些什么数据?
typedef struct
{ unsigned int f1:1;
unsigned int f2:2;
unsigned int :0;
unsigned int data:4;
} bitfield;
main()
{ int a;
bitfield btf;
btf.f1=1;
btf.f2=2;
btf.data=9;
printf("sizeof(btf)=%d
",sizeof(bitfield));
printf("btf.f1=%d
",btf.f1);
printf("btf.f2=%d
",btf.f2);
printf("btf.data=%d
",btf.data);
printf("btf=%xH
",btf);
scanf("%d",&a);
}
电脑问题网给出的最佳答案
输出的那个东西不是内存地址,从下面的程序可以看出是null的16进制表示。
#include<stdio.h>
typedef struct
{
int i1:8;
int i2:4;
int i3:4;
}bitfield;
void main()
{
int k;
bitfield b,b1,b2;
bitfield * p1,*p2,*p3,*p4;
b.i1=20;
b.i2=5;
b.i3=7;
p1=&b;
p2=&b1;
printf("int k=%xH\n",k);//未初始化的int k直接输出
printf("\nsizeof(b)=%d\n",sizeof(b));
printf("b.i1=%d\n",b.i1);
printf("b.i1=%x\n",b.i1);
printf("b=%xH\n",b);//已有值的bitfield b
printf("b=%xH\n",&b);//b的地址
printf("\nb1=%xH\n",b1);//未初始化的b1,b2
printf("b1=%xH\n",&b1);
printf("b2=%xH\n",b2);
printf("b2=%xH\n",&b2);
printf("\np1=%xH\n",p1);//已有值的指针p1,p2
printf("p2=%xH\n",p2);
printf("\np3=%xH\np4=%xH\n",p3,p4);/*未初始化的指针p3,p4*/
printf("&p4=%xH\n",&p4);//指针变量p4的地址
}
printf("%d The addres=%x", i,&i);这样不就可以输出变量的地址吗?
printf("%d The addres=%x", i,&i);这样不就可以输出变量的地址吗?
