入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

理解二维数组

创建时间:2018-04-14 投稿人: 浏览次数:121

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

      类型说明符  数组名 [常量表达式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("
");
	}
}

在二维数组中,只能省略最高为(常量表达式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("
");
	}
}
int main()
{
int err[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
Show(err,3,4);
return 0;
}
谨记,二维数组和二级指针不是同一概念,切勿搞混淆
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像