Sizeof 数组作为函数的参数传递
Sizeof array passed as parameter of function
让我们考虑以下代码:
#include <iostream>
using namespace std;
void foo(int * arr)
{
cout << sizeof(arr) << endl;
}
int main()
{
int arr[3] = {1, 2, 3};
cout << sizeof(arr) << endl;
foo(arr);
}
由于数组名称衰减为指向其第一个元素的指针,为什么 sizeof(arr)
在 foo()
中 returns 是 8 而不是 4?
在大多数情况下,指针的大小为 8 个字节。在您的系统中,这是指针的大小。
请注意,您可能知道,指针的大小不是它指向的对象的大小或对象类型的大小。
指针的大小取决于几个因素,例如CPU体系结构、编译器或操作系统。
通常的做法是如果系统是16位,大小指针大小是2字节,如果系统是32位,大小是4字节,如果是64位,大小是8字节。
您传递给函数的参数是数组第一个元素的地址。这意味着在函数中您只能看到您在 main 范围内声明的数组的地址。
如果你想像在 main 函数中一样对待数组,你应该将它的大小也作为参数传递给函数。如果您的数组始终具有固定大小,那么您不必这样做。
我想补充一点,sizeof(arr) 永远不会 return 与主作用域相同的值。
函数内部sizeof(arr)的结果就是sizeof(int*)的结果
当你将一个数组赋值给一个指针,并对指针使用sizeof
运算符时,sizeof
将return指针(不是数组)的大小。所以在 foo 函数中,sizeof
return int *
字节大小。
此外,您可以使用 array
代替内置数组。 array
知道它的大小,但内置数组不会。
注意:字体大小取决于平台。
让我们考虑以下代码:
#include <iostream>
using namespace std;
void foo(int * arr)
{
cout << sizeof(arr) << endl;
}
int main()
{
int arr[3] = {1, 2, 3};
cout << sizeof(arr) << endl;
foo(arr);
}
由于数组名称衰减为指向其第一个元素的指针,为什么 sizeof(arr)
在 foo()
中 returns 是 8 而不是 4?
在大多数情况下,指针的大小为 8 个字节。在您的系统中,这是指针的大小。
请注意,您可能知道,指针的大小不是它指向的对象的大小或对象类型的大小。
指针的大小取决于几个因素,例如CPU体系结构、编译器或操作系统。
通常的做法是如果系统是16位,大小指针大小是2字节,如果系统是32位,大小是4字节,如果是64位,大小是8字节。
您传递给函数的参数是数组第一个元素的地址。这意味着在函数中您只能看到您在 main 范围内声明的数组的地址。 如果你想像在 main 函数中一样对待数组,你应该将它的大小也作为参数传递给函数。如果您的数组始终具有固定大小,那么您不必这样做。 我想补充一点,sizeof(arr) 永远不会 return 与主作用域相同的值。
函数内部sizeof(arr)的结果就是sizeof(int*)的结果
当你将一个数组赋值给一个指针,并对指针使用sizeof
运算符时,sizeof
将return指针(不是数组)的大小。所以在 foo 函数中,sizeof
return int *
字节大小。
此外,您可以使用 array
代替内置数组。 array
知道它的大小,但内置数组不会。
注意:字体大小取决于平台。