#include <iostream>
void ArraySize(int arrMyarr[])
{
std::cout << sizeof(arrMyarr) << '\n';
}
void ArraySize1(int *arrMyarr)
{
std::cout << sizeof(arrMyarr) << '\n';
}
int main()
{
int arrTemp[] = { 122, 11, 22, 63, 15, 78, 143, 231 };
std::cout << sizeof(arrTemp) << '\n';
ArraySize(arrTemp);
ArraySize1(arrTemp);
return 0;
}
输出: 32 4 4
以下两个函数声明是否相同?
void ArraySize(int arrMyarr[]);
void ArraySize1(int *arrMyarr);
答案 0 :(得分:6)
以下两个函数声明是否相同?
是的,完全。传递时,数组会衰减为指向其第一个元素的指针,这就是您查看4
的原因。要防止出现这种情况,请使用std:vector
::size()
或std::array
(C ++ 11)作为编译时大小的C类数组。
答案 1 :(得分:1)
以下两个函数声明是否相同?
void ArraySize(int arrMyarr[]);
void ArraySize1(int *arrMyarr);
是的,完全一样。在函数参数的上下文中,arrMyarr[]
隐式转换为*arrMyarr
。这就是所谓的“阵列衰变到指针”。
答案 2 :(得分:1)
是的,上述两个函数的语法是相同的
在这两种情况下,我们{C}中的数组passing reference to the first element
即arrMyarr
。
即使你在括号内加上一个数字:void ArraySize(int arrMyarr[10])
10
完全被忽略
答案 3 :(得分:1)
请注意,如果您想查看实际尺寸,可以执行以下操作:
template<int N>
void ArraySize2(int (&arrMyarr)[N])
{
std::cout << sizeof(arrMyarr) << '\n';
}
显示32。
(但是请注意,模板是为每个不同的数组大小实例化的)
也可以对类型进行模板化(最终得到所谓的“数组大小”模板)。