• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Sunshine_Lin

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

函数形参为二维数组

二维数组类型

二维数组可以看成是:一个一维数组,它的每个元素均为一维数组。

例如:int arr[3][4],可以看成是arr[3]内每个元素均为int型长度为4的数组。

 

二维数组作为形参

当定义为:int arr[3][4];时,数组名arr是指向长度为4的一维数组的指针,arr的类型是int (*)[4]。类型中包含了第二维的长度,使用时arr[i][j],则解引用成*(arr+i*4+j)。而当二维数组名作为实参传递给函数时,会自动退化成指针,因此,实际上对应的形参的类型应该为int (*)[4]。

例如:

void func(int (*arr)[4], int arrLen1, int arrLen2){
    for(int i=0; i<arrLen1; i++)
        for(int j=0; j<arrLen2; j++)
            arr[i][j]=i*j;
}

int main(){
    int arr[3][4];
    func(arr, 3, 4);
    return 0;
}

我们在传递一个二维数组时,有如下几种方式:

int arr[3][4];
// arrptr1为指向长度为4的int型数组的指针,(arrptr2 + 1) = arrptr2 + sizeof(int)*4
int (*arrptr1)[4] = arr;
// 强制类型转化为(int **)类型,此时因为编译器不知道二维的长度,不能使用下标运算符"[]"来调用其中元素,(arrptr2 + 1) = arrptr2 + sizeof(int)
int **arrptr2 = (int **)arr; 

  

posted on 2015-11-26 15:03  Sunshine_Lin  阅读(1018)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3