有没有一种方法可以通过sizeof()来计算指向向量的大小
Is there a way to calculate the size of a pointed vector through 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
- 计算排序向量的向量中唯一值的计数
- C++ 中的特征向量计算
- C++ 带有向量的 IF 计算操作数
- 如何计算向量[5][1] N次
- 如何在向量中某个数字之后重新计算进程
- 计算数组的特征值/向量,而不是使用特征 3 计算矩阵
- 如何使用count_if计算向量中的可变数字范围
- 如何计算单个元素在向量<float>中所有元素之和中的百分比
- 如何以C++为单位计算向量中的字节数?
- 通过将文本文件读取为字符串/向量来计算加权/未加权 GPA
- 如何通过 stl 容器和算法库计算两个向量的内积?
- 计算 cv::P oints2f 向量中的重复项
- 如何计算 2D 数组中每行的总和并放置在向量中
- 计算向量中大于数字的元素
- 使用向量计算到期日期
- 通过查找重复顶点从 vec3 对象的向量计算索引
- 用stl向量计算复杂度
- OBB在第二次通过"Assertion Failed"时崩溃的特征向量计算
- 用C++中的向量计算大整数
- 如何使用向量计算点之间的距离