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


// 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 = %pn", p, ptr);
printf("*p = %d, *ptr = %pn", *p, *ptr);
printf("sizeof(p) = %lu, sizeof(*p) = %lun",
sizeof(p), sizeof(*p));
printf("sizeof(ptr) = %lu, sizeof(*ptr) = %lun",
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 ?

在64位系统上,指针用8字节表示,无论它们将指向

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

最新更新