一维与二维数组的人生

 

一、定义

int arr[10]         定义要类型   10为数组长度,位置是0~9

 

 

int brr[3][4]       定义要类型   表示3行4列 ,共12个位置

                                              第一行为brr[0][k]  k为列的取值 范围为0~3  其他行同理

                                              第一列为brr[h][0]  h为行的取值 范围是0~2  其他列同理

二、初始化 

(1)一维数组

int arr[5] = {1,2,3,4,5};

int arr[5] = {1,2,3};            //剩余默认为0

     arr[3] = 10    只是赋值,下标为3的arr数组的值为10

 

(2)二维数组是以行优先,所以在定义的时候可以省略行的值,但不能省略列的值。

 

 

int brr[2][3] ={{1,2,3},{4,5,6}};

//里面的一个大括号表示一行的值

int crr[2][3] ={1,2,3,4,5,6};

//按照行优先的规则,从第一行第一个的位置开始存放,当存满时候,就自动跳转到下一行开始存放

 

 

 

int drr[2][3] ={1,2,3};

//其余默认为0

 

 

int err[][3] = {{1,2,3},{4,5,6}};

int frr[2][3] ={1,2,3,4,5,6};

//省略行值,但系统会自动算出行值2

三、打印

利用函数调用,打印:
在利用函数调用打印二维数组时,一般我们的参数列表为
void show(int crr[][4],int row,int col)
在这里要注意,二维数组的数组名不是一个二级指针,因此,不可以将参数列写成
void show(int **crr,int row,int col)//error
在调用函数中,一维数组的形参列表可以写成(int *arr)指针类型,

那么二位数组呢,接下来我们对比分析一下两者的异同:

 

一维数组,它的定义为:int arr[4];并且我们可以确定的是:

先来看一维数组,一维数组中的数组名

arr的数据类型为int *
arr+1为int *
arr[0]为int 

在二维数组中,int brr[3][4];它的数组名以及以下的数据类型分别为:


brr:         int(*p)[4]
brr+1:     int(*p)[4]
brr[0]:      int *
brr[0]+1:  int *
brr[0][0]:  int

也就是说,我们可以将一个二维数组看成是一个一维数组,一行为一个单元格,遵循行优先的原则。
即brr[0][4]和arr[4]相比较,arr == brr[0],同为一维数组名。
在此,我们区别以下数组指针和指针数组的含义:
int (*p)[4];//数组指针:即指向数组的指针
int *p[4];//指针数组:即保存指针的数组

 

附加:

  关于二维数组越界的问题,由于我们可以将一个二维数组看成一个一维数组,当二维数组越界时,自动跳转到下一行的起始位置。两者位置是相同的。

#include <stdio.h>
int main()
{
	int arr[2][3]={1,2,3,4,5,6};
	printf("%d %d\n",&arr[0][3],&arr[1][0]);
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值