【发布时间】:2023-04-07 19:24:01
【问题描述】:
我只是想在函数中获取作为参数传递的数组的大小,但我不明白为什么 sizeof(k)/sizeof(k[0]) 在正常工作时只返回一个声明它的范围,我在这里缺少什么?
代码如下:
#include <iostream>
using namespace std;
int fn(int k[]){
cout << "size in function :" << sizeof(*k) / sizeof(k[0]) << endl; //returns 1 for some reason
//cout << "size in function :" << end(k)-begin(k) << endl; // can't find begin-end fitting function?
int m = *max(&k[0], &k[sizeof(k)/sizeof(int)]);
return m;
}
int main()
{
int k[] = { 1,2,3,4,5,6,7 };
int s = size(k);
cout << "size :" << sizeof(k) / sizeof(k[0]) << endl;
cout << "max: " << fn(k);
return 0;
}
【问题讨论】:
-
"...我只是想在函数中获取作为参数传递的数组的大小..." 你不能 - 要么通过尺寸;使用
std::array;使用std::vector或模板函数。 -
我在这里缺少什么? --
int fn(int k[])与int fn(int* k)完全相同。函数声明中的[]只是指针的语法糖。现在您看到k是一个指针,其余的应该是不言自明的。 -
@PepijnKramer 您认为我在这里的两个链接中的哪一个是“一遍又一遍地盲目重复”?这些都是强词。
标签: c++