You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指针数组的引用作为函数参数?类型转换报错求解

如何将指针数组的引用作为函数参数编写?
  • Class B 可以正常运行:它的构造函数接收整数数组的引用作为参数。
  • Class 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]

报错原因

核心问题是类型不匹配:你声明的参数类型int (*&pparr)[2]是指向包含2个int元素的数组的指针的引用,但实际传入的parr是包含2个int*元素的数组,其类型为int*[2]。同时,int (*)[2]无法直接转换为int**,导致赋值失败。

修正方案

要正确接收指针数组的引用,参数类型应该写成int* (&pparr)[2]——这才是对int*[2]类型数组的引用。数组名可以隐式转换为指向第一个元素的指针,此时pparr会转为int**,可以直接赋值给pparr_。

修正后的Class A代码:

class A // 现在可以正常运行
{
  int ** pparr_;
  A(int* (&pparr)[2] ) 
  {
     pparr_ = pparr;  
  }
};

补充说明

数组引用的写法规则是:对于类型为T[N]的数组,其引用格式为T (&变量名)[N]。这里的T是int*,所以对应的引用就是int* (&pparr)[2]。之前的写法错误地把指针和数组的层级搞反了,导致类型完全不匹配。

内容的提问来源于stack exchange,提问作者schanti schul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:57:45