在C++中使用 size 的奇怪行为
strange behaviour using sizeof in C++
我对C++很陌生。从示例中,我发现sizeof
的这种用途是为了检索数组的长度
int main()
{
int newdens[10];
// the first line returns 10 which is correct
std::cout << "nLength of array = " << (sizeof(v1)/sizeof(*v1)) << std::endl;
std::cout << "nLength of array = " << (sizeof(v1) << std::endl; //returns 40
std::cout << "nLength of array = " << (sizeof(*v1)) << std::endl; //returns 4
}
但是如果我写了这样的函数
#include <iostream>
void myCounter(int v1[])
{
int L, L2, L3;
L = (sizeof(v1)/sizeof(*v1));
L2 = (sizeof(v1));
L3 = (sizeof(*v1));
std::cout << "nLength of array = " << L << std::endl;
std::cout << "nLength of array = " << L2 << std::endl;
std::cout << "nLength of array = " << L3 << std::endl;
}
int main()
{
int v1[10];
std::cout << "nLength of array = " << (sizeof(v1)/sizeof(*v1)) << std::endl;
std::cout << "nLength of array = " << (sizeof(v1)) << std::endl;
std::cout << "nLength of array = " << (sizeof(*v1)) << std::endl;
myCounter(v1);
}
输出为 L=2, L2 = 8, L3 = 4。我不明白问题出在哪里。
如何在函数中检索 v1 的正确长度?
您的问题是sizeof()
在编译时已解决。由于它没有关于阵列大小的信息,因此无法判断其大小。它将其解释为指向 int 的指针,该 int 在您的计算机上是 64 位的。
最好的方法是使用 std::vector 而不是 C 样式数组,并使用其方法 size()
。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- vector.size() 在比较中意外工作
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 为什么"(!v.empty())"比"(v.size() >0)"好?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- std::string.size() 未知行为
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- 使用 std::size 来自非 const 上下文
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 行 - " vector<int> used(adj.size(), 0); "是什么意思?