理解二维数组

二维数组常称为矩阵,其定义的一般形式为:

      类型说明符  数组名 [常量表达式1][常量表达式2]

      eg: int arr[3][4]表示为定义了一个3行4列的整型数组。

      char brr[4][5]表示为定义了一个4行5列的字符型数组。

      int crr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

      int drr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

      int err[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

写一个二维数组,使其按矩阵的方式输出;

# include <stdio.h>
int main()
{
 int crr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    for(int i=0;i<3;i++)//遍历行
	{
		for(int j=0;j<4;j++)//遍历列
		{
			printf("%-3d ",crr[i][j]);//-表示左对齐
		}
		printf("\n");
	}
}

在二维数组中,只能省略最高为(常量表达式1),不能省略最低为(常量表达式2),即就有了行优先.

int crr[][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//正确。

int crr[3][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//错误

int crr[][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//错误

那么,在形参中,怎么写二位数组呢?

先来看看一维数组和二维数组的比较:

一维数组  :                                                                                         二位数组:(可以看成一个特殊的一维数组):

     int arr[3]                                                                                                int brr[3][4](把一行数看成一个地址)

    arr :       int *型(表示首地址)                                                                     brr             int(*p)[4]  

   arr+1:    int *型(表示指针+1)                                                                     brr+1        int(*p)[4]  

   arr[0]:    int型(表示首地址元素 )                                                                 brr[0]        brr[0]==arr(表示首地址)= int *型

                                                                                                                    brr[0]+1    int *

                                                                                                                    brr[0][0]    int型(表示首地址元素)

那么在形参中,定义二位数组arr[3][4]=>int(*arr)[4](指向数组的指针,即为数组指针)

  注意:int(*arr)[4]与int*arr[4]两个意思不一样,应为优先级不一样:

int(*arr)[4]:指向数组的指针,即为数组指针。

int*arr[4] :保存指针的数组,即为指针数组。

用函数的方法,输出二维数组。

# include<stdio.h>
//void Show( int **arr)//error,
void Show(int (*err)[4],int row,int col)
{
	for(int i=0;i<row;i++)//遍历行
	{
		for(int j=0;j<col;j++)//遍历列
		{
			printf("%-3d ",arr[i][j]);//-表示左对齐
		}
		printf("\n");
	}
}
int main()
{
int err[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
Show(err,3,4);
return 0;
}
谨记,二维数组和二级指针不是同一概念,切勿搞混淆
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值