如何编写对指针数组的引用作为函数的参数?
B 级 - 有效。整数数组。
A 级 - 失败。指向整数的指针数组。
#include <iostream>
int a = 1;
int b = 2;
int arr[2] = { 1, 2 } ;
int * parr[2] = { &a, &b };
class B // works
{
int * parr_;
B(int (&arr)[2] )
{
parr_ = arr;
}
};
class A // doesn't work!
{
int ** pparr_;
A(int (*&pparr)[2] )
{
pparr_ = pparr; //error
}
};
错误:
ERROR!
g++ /tmp/K0oKZ2yIsn.cpp
/tmp/K0oKZ2yIsn.cpp: In constructor 'A::A(int (*&)[2])':
/tmp/K0oKZ2yIsn.cpp:25:16: error: cannot convert 'int (*)[2]' to 'int**' in assignment
25 | pparr_ = pparr;
| ^~~~~
| |
| int (*)[2]
当前
pparr
是对指向大小为 2 且元素类型为 int
的数组的指针的 引用。您真正想要的(根据您的描述)是声明一个对指向 int
的指针数组的 引用,这可以通过将 pparr
的声明更改为如下所示来完成:
class A // works now
{
int ** pparr_;
//------v------------------->note the asterisk is moved outside the parenthesis
A(int *(&pparr)[2] )
{
pparr_ = pparr; //works now
}
};