关于使用gcc -m32编译时的两个问题
int a = 10; printf("sizeof(a) = %ld\n", sizeof(a)); printf("&a = %p\n", &a);
在默认编译后运行结果:
inux@ubuntu:~/Class/week01$ gcc var-02.c
linux@ubuntu:~/Class/week01$ ./a.out
sizeof(a) = 4
&a = 0x7fff46f7cb74
在使用32位系统编译运行结果:
linux@ubuntu:~/Class/week01$ gcc -m32 var-02.c
var-02.c: In function ‘main’:
var-02.c:7:24: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘unsigned int’ [-Wformat=]
printf("sizeof(a) = %ld\n", sizeof(a));
~~^
%d
linux@ubuntu:~/Class/week01$ ./a.out
sizeof(a) = 4
&a = 0xffd2c358
第一个问题:既然sizeof都是4,证明都是占4个字节,为什么&a寻址一个是8位4个字节,另一个是12位6个字节?这里的内存地址位数是根据什么决定的?
第二个问题:在使用-m32编译时,提示sizeof(a)的结果是unsigned int类型,需要使用%d来输出,那这里实际开发中应该怎么写?
正在回答 回答被采纳积分+1
- 参与学习 394 人
- 提交作业 22954 份
- 解答问题 1163 个
行业热门,政策风口,人才缺口极大,现在入场时机正好! 上千人检验,数轮迭代的硬核知识体系,软硬件通吃 保姆式教学+简历指导+1V1模拟面试+3次内推,助力轻松就业!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星