当值被类型化时,地址值是不同的

时间:2016-05-20 04:54:54

标签: c pointers

您好我正在学习C中的结构和指针。这时我正在打印& tmp.z - 8时,该值与Iam进行类型转换和打印(char *)& tmp.z - 8时不同。我浏览了一些关于类型转换和指针的文章,但是找不到合理的理由,有人可以帮我解决这个问题吗?

    struct xyz
    {
        int x;
        char y;
        double z;
    }tmp;

    int main()
    {
        printf("%p\n",&tmp.z - 8);
        printf("%p\n",(char *)&tmp.z - 8);
        return 0;
    }

1 个答案:

答案 0 :(得分:4)

tmp.z是double类型的变量。

因此&tmp.z会指向double

如果将1减去类型为double的指针,则将转到上一个双位置,即8个地址减去(如果sizeof(double)为8))。如果您使用&tmp.z - 8,您将获得64个地址,小于&tmp.z

如果你进行类型转换,(char *)&tmp.z会给出一个字符指针。如果从中减去8,则在此之前将获得8个字符,即地址为8个位置,因为字符的大小为1。