鱼C论坛

 找回密码
 立即注册
查看: 2096|回复: 1

[已解决]这个代码为什么在32位架构和64位架构下不一样?

[复制链接]
发表于 2023-4-19 22:53:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题1:这个代码为什么在32位架构和64位架构下不一样?
问题2:        printf("%lu\n",sizeof(&i)); 这一句是啥意思?打印的i的地址值的空间大小?i的地址的值是什么类型?(是指针类型?还是十六进制的整形类型?)
问题3:为什么在64位架构下 i是int类型 &i的空间大小是8  但是int类型是4字节啊 i是一个int类型啊!  难道这个&i是一个指针?
#include<stdio.h>

int main(void)
{
        int i = 0;
        int p;
        p = (int)&i;
        printf("%x\n",p);
        printf("%p\n",&i);
        printf("%lu\n",sizeof(int));
        printf("%lu\n",sizeof(&i));
        
        return 0;
}
最佳答案
2023-4-19 22:58:11
问题1:这个代码为什么在32位架构和64位架构下不一样?

答:因为32位架构和64位架构的指针大小不同。在32位架构下,指针通常是4个字节,而在64位架构下,指针通常是8个字节。因此,在不同架构下运行这段代码可能会导致不同的输出。

问题2:printf("%lu\n",sizeof(&i)); 这一句是啥意思?打印的i的地址值的空间大小?i的地址的值是什么类型?(是指针类型?还是十六进制的整形类型?)

答:这一句代码的意思是打印&i的大小。&i是一个指向i的指针,表示i的内存地址。sizeof(&i)计算的是这个指针所占用的内存大小。&i是一个指针类型,具体类型是int *,即指向整数的指针。

问题3:为什么在64位架构下 i是int类型 &i的空间大小是8 但是int类型是4字节啊 i是一个int类型啊! 难道这个&i是一个指针?

答:i是一个int类型,确实占用4个字节。但&i表示的是i的内存地址,是一个指向i的指针。在64位架构下,指针大小通常是8个字节。所以,&i的大小是8,这是因为它是一个指针,而不是int类型。

这段代码的输出如下:

  • 以十六进制形式打印p(即将&i强制转换为int类型后的值)。
  • 以指针形式打印&i(即i的内存地址)。
  • 打印int类型的大小(通常是4个字节)。
  • 打印&i的大小,即指向i的指针所占用的内存大小(在64位架构下通常是8个字节)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-19 22:58:11 | 显示全部楼层    本楼为最佳答案   
问题1:这个代码为什么在32位架构和64位架构下不一样?

答:因为32位架构和64位架构的指针大小不同。在32位架构下,指针通常是4个字节,而在64位架构下,指针通常是8个字节。因此,在不同架构下运行这段代码可能会导致不同的输出。

问题2:printf("%lu\n",sizeof(&i)); 这一句是啥意思?打印的i的地址值的空间大小?i的地址的值是什么类型?(是指针类型?还是十六进制的整形类型?)

答:这一句代码的意思是打印&i的大小。&i是一个指向i的指针,表示i的内存地址。sizeof(&i)计算的是这个指针所占用的内存大小。&i是一个指针类型,具体类型是int *,即指向整数的指针。

问题3:为什么在64位架构下 i是int类型 &i的空间大小是8 但是int类型是4字节啊 i是一个int类型啊! 难道这个&i是一个指针?

答:i是一个int类型,确实占用4个字节。但&i表示的是i的内存地址,是一个指向i的指针。在64位架构下,指针大小通常是8个字节。所以,&i的大小是8,这是因为它是一个指针,而不是int类型。

这段代码的输出如下:

  • 以十六进制形式打印p(即将&i强制转换为int类型后的值)。
  • 以指针形式打印&i(即i的内存地址)。
  • 打印int类型的大小(通常是4个字节)。
  • 打印&i的大小,即指向i的指针所占用的内存大小(在64位架构下通常是8个字节)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表