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

如何在C++中创建指向二维数组的指针数组?

创建指向特定维度二维数组的指针数组

要创建存储int (*ptr)[n]这类指针的数组,核心是明确数组元素的类型是“指向含n个int的一维数组的指针”,注意括号优先级(避免和普通的int指针数组int *ptr[n]混淆),具体写法和示例如下:

基础声明写法

直接声明指针数组的语法格式:

int (*ptr_arr[N])[n];

其中:

  • N是指针数组的元素总数(你需要存储的这类指针的数量)
  • n是目标二维数组的列数(即原指针指向的一维数组的长度)

代码示例

比如创建一个能存储2个指向int[3]的指针的数组,并完成赋值与访问:

#include <iostream>

int main() {
    // 两个3x3的二维数组作为目标
    int Arr1[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    int Arr2[3][3] = {{10,11,12}, {13,14,15}, {16,17,18}};

    // 声明指针数组:包含2个元素,每个元素都是指向int[3]的指针
    int (*ptr_arr[2])[3];

    // 给指针数组元素赋值,指向两个二维数组的首行
    ptr_arr[0] = Arr1;
    ptr_arr[1] = Arr2;

    // 测试访问:输出Arr1[0][0]和Arr2[1][1]
    std::cout << (*ptr_arr[0])[0] << std::endl; // 输出1
    std::cout << ptr_arr[1][1][1] << std::endl; // 输出14
    return 0;
}

注:ptr_arr[i][j][k]等价于(*(ptr_arr[i] + j))[k],因为指向数组的指针支持偏移运算,所以可以简化多维元素的访问写法。

简化写法(类型别名)

如果觉得直接声明的语法过于繁琐,可通过typedef或C++11的using定义类型别名,提升代码可读性:

用typedef

// 定义类型别名:Arr3Ptr 代表“指向含3个int的一维数组的指针”
typedef int (*Arr3Ptr)[3];
// 声明指针数组:2个元素,每个元素类型为Arr3Ptr
Arr3Ptr ptr_arr[2];

用using(C++11及以后)

// 更直观的类型别名写法
using Arr3Ptr = int (*)[3];
Arr3Ptr ptr_arr[2];

注意事项

  • 类型必须严格匹配:不能将指向int[4]的指针赋值给Arr3Ptr类型的变量,数组长度是类型的一部分,编译器会做严格的类型检查。
  • 二维数组名可直接赋值:二维数组名会自动退化为指向其首行(一维数组)的指针,和我们定义的指针类型完全兼容。

内容的提问来源于stack exchange,提问作者Mattia Suffredini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:06:19