C++中的SIEZOF算子
我有两个数组,一个是一维数组,第二个是二维数组。 我将它们都传递到一个函数中。如果我尝试在函数和main本身中使用sizeof运算符。但是,它给了我两种不同的输出 这是我的节目: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;
#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