对指针数组的引用

问题描述 投票:0回答:1

如何编写对指针数组的引用作为函数的参数?

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]
c++ c++14
1个回答
0
投票

当前

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
      
  }
  
};

工作演示

© www.soinside.com 2019 - 2024. All rights reserved.