数组:多维数组本质和字符数组语法

初学c语言,记录一下学习过程。

数组概括

引入数组的原因:* 要声明很多变量* 程序冗长* 可扩展性差*

  • 数组:同一类型数据的集合,用数组名标识
  • 元素:数组的基本单元,用数组名和下标确定
    数组名表示内存首地址,是地址常量;
    编译时分配连续内存;
    **数组定义(在定义期间无论名字和下标)**必须用常量表达式,地址是确定的,分配的内存也是确定的;在分配好内存以后,下标可以是变量(该变量需要在范围内);
    可以用a[i]的情况

在这里插入图片描述

数组必须先定义,后使用;
只能逐个引用数组元素,不能一次引用整个数组;

int a[5];    
      a[4]=10;   

可以没初始化数组就对其中的一个元素赋值;但不能a[5]=10,这样就越界了。

******排序的应用实例(待补充)

多维数组

多维数组本质是一维数组的原因是内存是一维的。
任意维度数组最左边的是元素的个数【对于多维数组,元素并不是不可以分割的,每一个元素又是一个一维数组】
###多维数组类似于把集合分成好几个大类,再在大类的基础下分成好几个小类,有几维就说明有几层。
对于二维数组而言:行序优先,意味着行是最外层的分类。
将多维数组映射到一维上来,类似于完全展开最小的一层分类,即集合里的全部展开,然后将几个小部分一层一层的扩起来。
int a[M][N];二维数组的本质是包含M个“元素”一维数组,其中的“元素”包含N个一维数组,因此二维数组就是包含一维数组的一维数组。

二维数组的初始化

int a[2][3]={{1,2,3},{1,2,3}}; int a[2][3]={1,2,3,1,2,3};
(二维数组的初始化可以省略第一维的数字,但是不能省略第二维的数字)
二重for循环完美代表二维数组,外层for循环映射行,内层for循环映射列

(初始化应该=0赋值,因为不能确定第一个是否为最大值,若是,则不继续赋值)max选择需要赋初始值

字符数组和字符串

字符数组

字符数组是存储字符类型多个字符类型的结合,字符串是有多个字符组成的集合,
字符数组的初始化
逐个字符的赋值
**char ch[5]={‘h’,‘e’,‘l’,‘l’,‘o’};
‘a’代表字符,“ab”代表字符串。
整体字符串
char ch[6]={“Hello”};
char ch[6]=“Hello”;
char ch[]=“Hello”;
作为“abc”输入时,系统认定他为一个字符串所以自动加了一个’\0’,所以说应该在定义数组的时候留下位置
而作为‘a’输入时,系统没有把它作为一个字符串,故不用预留‘\0’的位置。
一个字符串的长度是不固定的,所以应该有结束符来告知系统他的长度。

二维数组表示多个字符串,长度不一样,所以[][]的最后一个长度要是最长的一个+1————但是容易造成内存浪费:表示多个字符串,除了二维数组之外可以用多个字符指针,在数组里面存指针;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值