C++中的SIEZOF算子

C++中的SIEZOF算子,c++,arrays,sizeof,C++,Arrays,Sizeof,我有两个数组,一个是一维数组,第二个是二维数组。 我将它们都传递到一个函数中。如果我尝试在函数和main本身中使用sizeof运算符。但是,它给了我两种不同的输出 这是我的节目: #include <iostream> using namespace std; void test(int *a,int b[][10]){ cout<<"Inside Test"<<endl; cout<<sizeof(a)<<endl;

我有两个数组,一个是一维数组,第二个是二维数组。 我将它们都传递到一个函数中。如果我尝试在函数和main本身中使用sizeof运算符。但是,它给了我两种不同的输出

这是我的节目:

#include <iostream>
using namespace std;
void test(int *a,int b[][10]){
    cout<<"Inside Test"<<endl;
    cout<<sizeof(a)<<endl;
    cout<<sizeof(b)<<endl;
}
int main() {
    // your code goes here
    int a[10];
    int b[10][10];
    cout<<sizeof(a)<<endl;
    cout<<sizeof(b)<<endl;
    test(a,b);
    return 0;
}
函数测试中的输出是指针的大小。如果我错了,请纠正我一个可能的原因,我认为是函数调用将数组的地址复制到函数要访问的其他位置,因此我得到4作为输出

但是,有没有一种方法可以让我在测试中的函数中使用sizeof操作符并打印出正确的大小。或者有没有其他方法可以得到正确的尺寸。我在上面给出的输出为4的原因是否正确


感谢您提前提供的帮助..:当然你会得到这个结果。任何指针的sizeof始终为4或8,具体取决于您运行的是32位还是64位进程

在main中,a不仅仅是指针,它是编译时已知大小的静态数组。然而,在测试中,它只是一个指针,而不是别的

如果不想在函数原型中显式传递数组的大小,则有2个选项:

在数组末尾添加一个额外的元素,表示它是最后一个元素,类似于c字符串的工作方式

相反,f普通数组使用STL容器,如std::vector,它通过成员函数提供数组的大小


sizeofa是sizeofint*,因此指针的大小。无法从指针获取数组的大小。函数参数都是指针。尽管将数组传递给函数,但函数接收的是指针,而不是数组。sizeof完全在编译时根据表达式的类型进行计算。如果您希望使用它来确定动态分配内存的大小,那么它是行不通的。如果您想向函数传递一个固定大小的数组,可以传递数组引用:void testint&a[10]-但这样您就不需要sizeof了。不,它们是main中的数组。函数参数是指针。修改函数以引用数组。
40
400
Inside Test
4
4