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

数组指针声明中&的使用疑问:二维数组为何出现类型不兼容错误

二维数组指针的类型匹配问题

先看一维数组的正确逻辑

一维数组int arr[3]的类型是int[3],取地址&arr得到的是指向int[3]类型的指针(即int (*)[3]),和你声明的指针p类型完全匹配,所以代码能正常编译。

二维数组的问题根源

二维数组int arr[3][3]的类型是int[3][3],取地址&arr得到的是指向int[3][3]类型的指针(即int (*)[3][3]),但你声明的p是int (*)[3]——这两个类型完全不兼容,所以编译器会抛出类型不匹配的错误。

两种正确的写法

  1. 指向整个二维数组的指针
    如果你的需求是声明一个指向整个3×3二维数组的指针,需要把指针类型改成int (*)[3][3]:

    int arr[3][3] = {{12,10,45}, {44,55,66}, {79,85,91}};
    int (*p)[3][3] = &arr;
    

    访问元素时用(*p)[i][j],比如(*p)[0][1]就能取到10。

  2. 指向二维数组中一维子数组的指针(更常用)
    如果只是想遍历二维数组的子数组,直接用数组名赋值即可——二维数组名arr会隐式转换为指向第一个一维子数组的指针,类型正好是int (*)[3]:

    int arr[3][3] = {{12,10,45}, {44,55,66}, {79,85,91}};
    int (*p)[3] = arr;
    

    访问元素可以直接用p[i][j],和arr[i][j]效果完全一致,比如p[1][2]能取到66。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:09:17