void f(int* b[])
{
cout << sizeof(*b) << endl;
}
int main()
{
int x[4] = {1, 2, 3, 4};
int* a[] = {&x[0], &x[1], &x[2], &x[3]};
cout << sizeof(a) << endl;
f(a);
}
程序首先输出 32(主( 和 8(功能中(
我该如何处理这种情况?
如果我理解正确,您正在尝试获取函数中传递的数组的大小。
按以下方式执行
template <size_t N>
void f( int* ( &b )[N] )
{
cout << sizeof( b ) << endl;
}
在 C 中,您应该使用另一个参数声明函数,例如
void f(int* b[], size_t n )
{
printf( "%zun", n * sizeof( *b ) );
}
并称它为喜欢
f(a, sizeof( a ) / sizeof( *a ) );
这种方法也可以在C++中使用。
通过使用size_t
类型传递数组中的元素数来处理这种情况。
一旦数组被传递给函数,它就会衰减到指向第一个元素的指针。所有大小信息都将丢失。sizeof
是一个奇怪的运算符,因为指针衰减不适用于其参数,这解释了输出的差异。
数组衰减为指针。这就是问题的原因。这是您可以解决它的方法。通过引用传递数组:
template <typename T>
void f(T &b) {
std::cout << sizeof(b) << std::endl;
}