Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么sizeof在双指针和双数组中的行为不同?_C++_Pointers - Fatal编程技术网

C++ 为什么sizeof在双指针和双数组中的行为不同?

C++ 为什么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时,编译器

我编写了一段代码,其片段如下所示。我不明白为什么它不为指针变量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时,编译器如何知道要释放多少空间

delete [] p;

因为实际指针地址存储在4个字节中。如果您想知道
p
所指内容的大小,您可以说:

sizeof(*p);

所有指针的大小都相同。指针是一个内存地址,所有地址都具有相同的大小。re相关问题:详细信息未指定,但从逻辑上讲,系统必须维护地址到分配大小(可能还有其他元数据)的某种映射,该映射由
new
delete
sizeof(*p)使用
最有可能是8。我实际上想知道编译器如何知道以前分配给p的空间有多少?代码中可以使用什么函数?像getMemoryAllocated(p)一样,它打印800(8*100字节)。