二维数组传参的本质

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

一:二维数组的理解

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

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

二:二维数组传参的本质

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

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

三:二维数组传参应用

#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;
}






目录
相关文章
|
6月前
|
存储 编译器 C语言
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
122 0
|
13天前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
5月前
|
C语言
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
|
6月前
|
存储 C语言
C语言向函数传递一维数组的技术详解
C语言向函数传递一维数组的技术详解
105 0
|
6月前
|
存储 C语言
C语言中向函数传递二维数组的技术详解
C语言中向函数传递二维数组的技术详解
162 0
|
6月前
|
存储 C语言 索引
指针详解(const、指针运算、数组名的理解、传址调用和传值调用、一维数组的本质​)(一)
指针详解(const、指针运算、数组名的理解、传址调用和传值调用、一维数组的本质​)(一)
|
6月前
|
存储 Java 索引
【Java数组】数组定义 | 初始化赋值 | 数组练习题
【Java数组】数组定义 | 初始化赋值 | 数组练习题
|
11月前
一维数组传参的本质
一维数组传参的本质
47 0
|
存储 小程序 编译器
数组传参不理解?(数组传参的本质)
数组传参不理解?(数组传参的本质)
102 0
|
搜索推荐 编译器 C++
C++基础:第5~6章:数组\函数
C++基础:第5~6章:数组\函数
50 0