C++ 为什么sizeof在双指针和双数组中的行为不同?
我编写了一段代码,其片段如下所示。我不明白为什么它不为指针变量p打印800C++ 为什么sizeof在双指针和双数组中的行为不同?,c++,pointers,C++,Pointers,我编写了一段代码,其片段如下所示。我不明白为什么它不为指针变量p打印800 double *p = new double [100]; double q[10]; printf("Sizeof(p) = %d\n", sizeof(p)); // prints 4 printf("Sizeof(q) = %d\n", sizeof(q)); // prints 80 我理解为什么q打印80(8字节/双倍*10),但p为什么不打印800?一个相关的问题是,当遇到delete for p时,编译器
double *p = new double [100];
double q[10];
printf("Sizeof(p) = %d\n", sizeof(p)); // prints 4
printf("Sizeof(q) = %d\n", sizeof(q)); // prints 80
我理解为什么q打印80(8字节/双倍*10),但p为什么不打印800?一个相关的问题是,当遇到delete for p时,编译器如何知道要释放多少空间
delete [] p;
因为实际指针地址存储在4个字节中。如果您想知道
p
所指内容的大小,您可以说:
sizeof(*p);
所有指针的大小都相同。指针是一个内存地址,所有地址都具有相同的大小。re相关问题:详细信息未指定,但从逻辑上讲,系统必须维护地址到分配大小(可能还有其他元数据)的某种映射,该映射由
new
和delete
sizeof(*p)使用
最有可能是8。我实际上想知道编译器如何知道以前分配给p的空间有多少?代码中可以使用什么函数?像getMemoryAllocated(p)一样,它打印800(8*100字节)。