我已经启用了一个2个昏暗的数组,但是数组的大小得到0:
auto **p = new string*[7];
for (int i = 0; i < 7; ++i) {
p[i] = new string[4];
}
cout << sizeof(p) / sizeof(string)<< endl;
任何人都可以给我一个有关此问题的专业答案:
- 为什么结果输出为0,而大小(p)的结果为8,如果分母和分子不是零的结果,结果怎么可能为0?(如果分母为0,则不是数学。)
- 如何实现新的A 2 DIM数组正确包含字符串?
当您使用new
进行数组分配内存时,它试图分配存储和成功后,将指针返回到数组的初始元素。因为在这里分配的数组腐烂到指针,所以您丢失了有关字节中数组大小的信息,因此您无法将元素数量计算为:
auto numberOfElements = sizeof(array) / sizeof(element);
在您的示例中,sizeof(p)
返回与基于您的体系结构的sizeof(std::string**)
相同。sizeof(string)
可能比sizeof(std::string**)
大,因此,从整数部门获得0
。
在C 中强烈建议使用标准容器而代替手动分配和Deallocation。正如您提到的评论所述,std::vector
是您在示例中应使用的,如下:
vector<vector<string>> p(7, vector<string>(4));
cout << p.size() << endl;
注意:当您为string*[7]
分配内存时,您已经清楚地指定了元素的数量,即7
。
sizeof(p)
是指针的大小,在您的系统中可能是8。
sizeof(string)
是类的大小,大于8。
您打印的结果:
8 / greaterThan8
给您0,因为它是整数部门。如果将其投射到浮动,它不会打印0。
sizeof(string)大于sizeof(p)
对于此类整数部门,结果为0。
例如1/4不是0.25,它是0。