二维数组传参的本质

简介: 二维数组传参的本质

一:二维数组的理解

二维数组的每一行可以看成一个一维数组,这个一维数组可以看成二维数组的一个元素,所以二维数组可以看成是一维数组的数组,一个元素代表一个一维数组

二维数组也是数组,数组名表示首元素的地址,就是第一行的地址,也就是一个一维数组的地址。

二:二维数组传参的本质

二维数组也是数组,数组名表示首元素的地址,就是第一行的地址,也就是一个一维数组的地址。

二维数组传参本质上也是传递了地址,传递的是第一行这个一维数组的地址,

三:二维数组传参应用

#include <stdio.h>
void test(int(*p)[5], int c, int r)//形参部分应该用数组指针接收
{
  int i = 0;
  for (i = 0; i < c; i++)
  {
    int j = 0;
    for (j = 0; j < r; j++)
    {
      //printf("%d ", *(*(p + i) + j));
      // p+i表示第i行的数组地址,
      // *(p+i)表示第i行数组的全部元素,也就表示数组名
      // *(p+i)+j表示该一维数组下第j个元素的地址
      //printf("%d ", p[i][j]);
      printf("%d ", (*(p + i))[j]);
    }
    printf("\n");
  }
}
int main()
{
  int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
  test(arr, 3, 5);//数组名表示首元素的地址,也就是第一行的地址
  return 0;
}
#include <stdio.h>
void test(int arr[3][5], int c, int r)//形参部分应该用数组指针接收
{
  int i = 0;
  for (i = 0; i < c; i++)
  {
    int j = 0;
    for (j = 0; j < r; j++)
    {
      //printf("%d ", *(*(arr + i) + j));
      //printf("%d ", arr[i][j]);
      printf("%d ", (*(arr + i))[j]);
    }
    printf("\n");
  }
}
int main()
{
  int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
  test(arr, 3, 5);//数组名表示首元素的地址,也就是第一行的地址
  return 0;
}






目录
相关文章
|
17天前
|
存储 编译器 C语言
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
|
4月前
|
存储 Java 索引
【Java数组】数组定义 | 初始化赋值 | 数组练习题
【Java数组】数组定义 | 初始化赋值 | 数组练习题
|
4月前
|
存储 C语言 索引
指针详解(const、指针运算、数组名的理解、传址调用和传值调用、一维数组的本质​)(一)
指针详解(const、指针运算、数组名的理解、传址调用和传值调用、一维数组的本质​)(一)
|
4月前
一维数组传参的本质
一维数组传参的本质
23 0
|
6月前
|
存储 小程序 编译器
数组传参不理解?(数组传参的本质)
数组传参不理解?(数组传参的本质)
74 0
|
7月前
|
搜索推荐 编译器 C++
C++基础:第5~6章:数组\函数
C++基础:第5~6章:数组\函数
36 0
数组作为函数参数传参&数组名到底代表什么意义?
数组作为函数参数传参&数组名到底代表什么意义?
|
10月前
|
程序员 C语言
一维数组传参问题
一维数组传参问题
|
10月前
|
C语言
深度理解C语言四——指针的进阶二(函数指针,函数指针数组,一维、二维数组传参,指针传参)
深度理解C语言四——指针的进阶二(函数指针,函数指针数组,一维、二维数组传参,指针传参)
95 0
C中二维数组作为参数的几种做法
C中二维数组作为参数的几种做法
73 0