这是一个c程序
#include<stdio.h>
main()
{
int(*p)[3][4];
printf("size of p= %d",sizeof(p));
printf("size of *p= %d",sizeof(*p));
return 0;
}
我可以理解,(* p)的大小应该是数组的总大小,在这种情况下是48字节。 但是gcc版本4.2.1给出了p = 8的大小。 为什么?
答案 0 :(得分:1)
指针存储它指向的数据的地址。指针变量的大小始终为8。
sizeof(* p)= 48
sizeof(p)= sizeof(&amp;(* p))= 8
PS:8字节大小仅适用于64位系统。它在32位中为4个字节,在16位系统中为2个字节。
答案 1 :(得分:0)
当你说声明为int(*p)[3][4]
时,
实际上你的意思是将p
声明为指向3
类型的数组4
的数组int
的指针。这里p
是一个指针,指针的大小是{64}机器上的8
。
理想情况下sizeof(p) == 8
&amp; sizeof(*p) == 48
答案 2 :(得分:0)
因为指针的值是地址,所以它的值不等于它指向的值。否则指针不会是指针,它们只是常规变量,因此无用。
如果您使用的是64位计算机,则指针的大小始终为8个字节。
编辑:如果你想知道为什么sizeof(*p)
是8
,那是因为*p
计算它指向的元素数组中的第一个元素(除非你增加它)元素。所以*p
= p[0]
,*(p+n)
= p[n]
等。
因此sizeof(*p)
始终等于p
指向的类型的大小。