【发布时间】:2020-04-05 19:20:36
【问题描述】:
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(在main) 和 8(在函数中)
我该如何处理这种情况?
【问题讨论】:
-
您还必须将数组的大小传递给您的函数。
-
指针的大小是指针本身的大小,而不是它可能指向的大小(因为编译器并不真正知道它可能指向什么)。
-
另外,如果你想真正比较苹果和苹果,在
f你应该做sizeof(b)而不是sizeof(b[0])(这就是sizeof(*b)的真正含义)。并不是说它会改变任何东西,因为b也是一个指针。 -
参数类型
int* b[]等价于int** b,而a的类型不是int*[],而是int*[4]
标签: c++ arrays c++11 sizeof implicit-conversion