为什么递增一个浮点数的结果与预期不同?

时间:2017-04-16 15:45:23

标签: c pointers

当我遇到疑问时,我正在尝试一些基本的问题。我尝试了以下代码来解决它:

#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个字节的地址。任何人都可以解释为什么会这样?

2 个答案:

答案 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个字节。