对作为参数传递的数组使用sizeof
Using sizeof on arrays passed as parameters
可能重复:
作为参数传递的数组大小
给定下面的函数,我知道sizeof返回数组中类型的指针的大小。
int myFunc(char my_array[5])
{
return sizeof(my_array);
}
但是,对未作为参数传递的数组调用sizeof通常会返回数组的sizeof。
造成这种不一致的原因是什么?当数组作为参数传递时,获取数组大小的最佳方法是什么?
您必须通过引用传递数组;不能按值传递数组(它们衰减为指向第一个元素的指针):
int myFunc(char const (& my_array)[5])
{
return sizeof(my_array); // or just "return 5"
}
如果你想通过引用许多不同的本地数组来调用这个函数,你可以使用函数模板来推导数组大小:
template <unsigned int N>
int myFunc(char const (& my_array)[N])
{
return sizeof(N); // or "return N"
}
不过,您确实应该让函数返回unsigned int
或std::size_t
。在C++11中,您还可以将它们声明为constexpr
。
是什么导致了这种不一致
数组的名称作为指向其第一个元素的指针而衰减
当您将数组传递给函数时,会发生这种衰减,因此传递给sizeof
的表达式是一个指针,从而返回指针大小。
然而,传递给sizeof
的数组总是返回数组的大小,因为在这种情况下不会衰减到指针。
当数组作为参数传递时,获取数组大小的最佳方法是什么
不要通过值传递,通过引用或
传递将size作为单独的参数传递给函数。
当您将数组传递给函数时,您必须调用如下函数:myFun(my_array,size),其中size是一个包含数组大小的整数变量。(这里是myFun(my_array,5))。并且函数的签名必须是:int myFunc(char my_array[],int size)
相关文章:
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 如何将数组传递给使用 sizeof 的函数?
- Sizeof返回的是指针大小,而不是数组大小.有其他方法可以找到尺寸吗
- 使用 sizeof 计算数组中的元素数时的结果不同
- sizeof(空结构)和sizeof(带有空数组的结构)之间的区别?
- 有人可以告诉我为什么我在这里使用sizeof()函数无法找到数组的长度
- 字符串数组上的C sizeof将传递给函数时未返回预期结果
- 使用sizeof()计算数组大小
- 数组中的值之和返回内存地址,除非sizeof(array)/2
- sizeof引用GDB中的数组
- 你能使用 sizeof() 打印由 char * 指向的数组的大小吗?
- sizeof()运算符为数组和指向数组的指针返回不同的值
- 为什么对于某些数组A,sizeof(A)在函数内部不起作用
- 数组和sizeof编译错误C++时出现问题
- sizeof 在传递模板数组时如何工作
- 为什么 sizeof 运算符在传递给方法的数组上使用时返回错误的值
- 对作为参数传递的数组使用sizeof
- Sizeof数组结构错误
- 为什么sizeof(数组)在这两种情况下不同