#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//二维数组传参为例了解数组指针的使用
void print_arr1(int arr[3][5], int row, int col) //传值调用,函数的形参直接是一个二维数组
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
void print_arr2(int(*arr)[5], int row, int col) //传址调用,int(*arr)[5]是一个一维数组指针,指向的是一维数组
{
//int(*arr)[5]是一个一维数组指针,指向的数组有5个元素
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
//printf("%d ", arr[i][j]);
printf("%d ", *(*(arr + i) + j));
//arr[i][j]与*(*(arr + i) + j)等价:
//arr是二维数组名,代表的是二维数组第一行的地址,那么arr + i就代表的是第i+1行的地址,*(arr + i)就是第i+1行的一维数组,如果觉得难理解,可以用一个一维数组(假设是arr1)来代替*(arr + i),arr1+j就是下标为j的元素的地址,即原代码中的*(arr + i) + j,对其解引用*(*(arr + i) + j))就得到该一维数组中的下标为j的元素。回到代码,*(arr + i)找到的是二维数组下标为i的行,最终再以*(*(arr + i) + j)找到下标为j的列,即arr[i][j]
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
print_arr1(arr, 3, 5);
//print_arr2(arr, 3, 5);
//传值调用中数组名表示的是整个数组;传址调用中数组名表示的是首元素的地址,对于二维数组而言,数组名表示的二维数组第一行的地址,即等价于一个一维数组指针
return 0;
}
二维数组传参为例了解数组指针
猜你喜欢
转载自blog.csdn.net/libj2023/article/details/131058349
今日推荐
周排行