为什么这个程序的整数大小是8?

问题描述 投票:0回答:2
// pointer of array

#include<stdio.h>

int main()
{
    int arr[] = { 3, 5, 6, 7, 9 };
    int *p = arr;
    int (*ptr)[5] = &arr;

    printf("p = %p, ptr = %p\n", p, ptr);

    printf("*p = %d, *ptr = %p\n", *p, *ptr);

    printf("sizeof(p) = %lu, sizeof(*p) = %lu\n",
                          sizeof(p), sizeof(*p));

    printf("sizeof(ptr) = %lu, sizeof(*ptr) = %lu\n",
                        sizeof(ptr), sizeof(*ptr));

    return 0;
}

输出

p = 0x7ffde1ee5010, ptr = 0x7ffde1ee5010
*p = 3, *ptr = 0x7ffde1ee5010
sizeof(p) = 8, sizeof(*p) = 4
sizeof(ptr) = 8, sizeof(*ptr) = 20

这里为什么

sizeof(p)
sizeof(ptr)
8

这段代码是指向数组指针的例子

为什么是 8,为什么不是 4?

arrays c pointers
2个回答
1
投票

在 64 位系统上,显然是您的系统,指针由 8 个字节表示,无论它们指向什么to

在您的示例中,

p
ptr
都是指针。在
p
的情况下,我们有一个指向数组中第一个
int
的指针。在你的系统上显然
int
是 4 个字节。在
ptr
的情况下,它被声明为指向 5 个
int
值的数组的指针,即 20 个字节。


-3
投票

因为PTR是指向指针的指针。所以 sizeof(*ptr) 返回内部指针的大小

© www.soinside.com 2019 - 2024. All rights reserved.