当我遇到疑问时,我正在尝试一些基本的问题。我尝试了以下代码来解决它:
#include<stdio.h>
typedef float mytype;
mytype q=1;
mytype *x=&q;
mytype *y=&q;
mytype *z=&q;
mytype *a=&q;
mytype *b=&q;
mytype *arr[5]={x,y,z,a,b};
int main()
{
printf("********************");
//printf("%u\n",sizeof(int*));
printf("%u\n",sizeof(double*));
printf("********************\n");
for(int i=0;i<5;i++)
{
printf("%p\n",arr[i]);
printf("%p\n",arr[i]+1);
printf("***********");
}
}
当我执行它时,sizeof浮点指针是8字节,但递增它会产生一个只有4个字节的地址。任何人都可以解释为什么会这样?
答案 0 :(得分:2)
指针的大小在64位系统上是8个字节。指针引用的大小是4个字节。
例如,在64位系统上float foo
:
sizeof(&foo)
是64位
sizeof(foo)
是32位
答案 1 :(得分:0)
您正在使用64位系统运行。指向内存地址的指针大小为8个字节,但float的大小只有4个字节(因为float是一个单精度浮点数)。
在64位系统上,所有指针的长度为8个字节,以允许存储器地址> 4GB待解决。
当你递增指针时,你将它增加一个浮点数的大小,这个浮点数是4个字节,所以指针增加了4个字节。