有没有一种方法可以通过sizeof()来计算指向向量的大小



即使我写了这个语句

char *test= new char[35];

sizeof(test)将始终返回4(或取决于系统的其他数字)而不是35。我认为这是因为指针的大小严格来说是物理"指向实体",而不是为该指针保留的内存量。这是正确的吗?

此外,有没有一种方法可以使用sizeof()来检索为特定指针保留的内存量?

没有。

指针只是普通变量(通常实现为整数地址)——它们可以指向其他对象与sizeof无关。不要把它们看作是某种"魔法",它与它们所指向的东西有着密切的联系。指针只不过是一个街道编号。

我提起这个是因为:

[…]指针的大小严格来说是物理的"指向实体"而不是为该指针保留的内存量

在你的代码行中:

  • 在动态存储器中分配35个char的阵列
  • 其第一个元素的地址由new返回
  • 您将此地址保存在test

请注意,数组或数组大小的任何概念在第二步之前都已消失。指针对此一无所知。知道。

如果您想检索数组的大小,您需要在一个单独的变量中自己跟踪它,或者使用一个为您做这件事的类,即std::vector<char>

我认为这是因为指针的大小严格来说是物理"指向实体",而不是为该指针保留的内存量。这是正确的吗?

是的,这是正确的;您将sizeof()作为指针。指针是内存中的一个地址;在32位系统上,这将是4个字节。64位系统,它将是8个字节。

此外,有没有一种方法可以使用sizeof()来检索为特定指针保留的内存量?

没有。sizeof()对指针指向什么一无所知;这是一个编译时计算。获得这个大小将取决于它的分配方式。

一般来说,您应该使用std::vector<>。要获取std::vector<>的大小,请使用std::vector<>::size()

正如其他答案中所说,从正常指针无法知道它所指向的点上保留的内存量,因为它仍然指向垃圾。

一旦用C字符串填充内存,就可以用strlen(test)获得长度,因为它会查找字符串字节(0x0)的末尾。

更好的解决方案是使用阵列:

char test[35];
szie_t size = sizeof(test); //< returns 35

最新更新