这个代码为什么在32位架构和64位架构下不一样?
问题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;
}
问题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个字节)。
页:
[1]