C 数组

数组是内存中连续存储的有相同类型的数据的有序集合,是一种构造类型。 

定义方式 :类型  数组名[元素个数];(要好好记住定义方式便于后续复杂类型数组的理解)

不要认为a[i]代表数组元素的值,它代表数组元素本身,可作为左值使用。


数组的初始化方式

完全初始化:inta[10] = {0,1,2,3,5,6,7,8,9};

部分初始化:intb[10] = {8,1};

默认初始化:intc[] = {1,2,3,4};//系统根据初值个数确定数组长度

注意char c3[]={'H','a','p','p','y','\0'};后面必须加\0不应该这样写char c2[]={'H','a','p','p','y'};如果%s的格式输出c2则会有垃圾数据产生


数组特点

存储空间连续;

元素之间有序;

元素类型相同;

元素个数固定(除了在堆上分配);

数组元素无名;

数组名代表了数组的首地址,它具有特定的数据类型,一定是个常量


访问素组元素

数组不能以整体形式参与数据处理,只能逐个使用数组元素。

sizeof(数组) = 数组所占内存大小 strlen(字符数组)=从开始到‘\0’

数组越界有可能修改其他变量的值,比如先定义一个int然后再定义一个数组a[n],那么a[n]便是指向之前定义的那个int


数组与指针

数组名代表数组的首地址,是不可修改的常地址。指针只不过是模仿下数组的作用而已


多维数组

C语言将多维数组的访问变成了多次对一维数组的访问。

C语言只能处理一维的数组.

对二维数组,C语言进行了一次“降维”处理。即将二维数组视为一个特殊的一维数组,它的每个元素都是个一维数组。

二维数组初始化:

1.按行分段赋值。例如:inta[3][4]= { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}};

2.将所有的初值写在一个大括号内,按数组元素的排列顺序对各个元素赋初值。

3.可以对数组部分元素赋初值。例如:inta[3][4]={{1},{5,6},{9}};

4.如果对数组的全部元素都赋初值,则定义数组时可以不指定数组的第一维长度,但第二维长度不能省略。int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};

二维数组与指针

假设定义了inta[4][5] 那么:a+2表示第二行的地址 *(a+2)第2行第0列元素的地址。*(*(a+2))第2行第0列元素。

二维数组的三种视角若定义inta[4][5]; 

1. 可视为一个二维数组。

2. 可视为由四个一维数组元素组成的一维数组,每个元素的类型是int[5]的数组类型。

3. 可视为纯粹由20个整型元素组成的一维数组;不同的视角界定了数组元素的访问方式,但无论以什么视角,它们在内存中的存储形式都是一样的。


函数与数组

当数组作为函数的参数进行传递时,该数组自动退化为指针。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值