C语言数组笔记

1.数组的概念

2.一维数组的创建和初始化

3.一维数组的使用

4.一维数组在内存中的存储

5.seizof计算数组元素个数

6.二维数组的创建

7.二维数组的初始化

8.二维数组的使用

9.二维数组在内存中的存储

10.C99中的变长数组

1.1数组的概念

1)数组是一组相同类型的元素的集合,分为一维数组和多维数组。

2.1一维数组的创建和初始化

1)基本语法:

  1. type arr_name [ 常量值 ] ;

解释:

type 是指定数组中存放的数据类型,可以是 char , short , int , float 等,也可以自定义的类型。

arr_name 是数组的名字,根据需要任意取。

[ 常量值 ] 指定的是数组中元素的个数。

2)数组的初始化。

数组的初始化就是给定数组中元素的初始值,可以完全初始化也可以不完全初始化。

完全初始化例:

  1. int arr[ 3 ] = { 1,2,3 }; //实际初始元素个数等于数组中应有元素个数。

不完全初始化例:

  1. int arr[ 3 ] = { 1,2 }; int arr[ 3 ] = { 1 };//实际初始元素个数小于数组中应有元素个数,这种情况下剩余未初始化的元素的值默认初始化为 0 。在这里前者初始值为 1,2,0;后者为1,0,0 。

注意:若初始值个数多余应有元素个数,则是错误的。

3.1一维数组的使用

1)一维数组的下标; 数组中每一个元素都有下标,一维数组的下标从左往右是从0开始递增,第一个元素的下标是0,而不是1。也就是说第n个元素的下标那就是n-1。

如何引用数组的元素?

答:使用下标引用操作符 [ ] ,假设数组名为arr,若要访问下标为 2 的元素,就可以使用 arr [ 2 ] ,也就是依次序的第三个元素;

若要访问下标为 8 的元素,就可以使用 arr [ 8 ] ,也就是依次序的第九个元素;以此类推。实际使用过程当中,arr [ 变量名 ] 可以使用变量名来替代里面的常数。

2)综上我们大概就知道了数组元素应该如何打印,打印的语句直接 printf ( "%d",arr[ 8 ]);就能取出下标为8的元素。

3)当然,数组初始化之后,也可以自定义输入元素的值:scanf("%d",&arr[ 8 ]);就能将值输入给下标为8的元素。

4.1一维数组在内存中的存储

1)使用若有一组数据,使用printf ( "&arr[ %d ] = %p\n", i , &arr [ i ]);依次序打印每一个元素的地址,会发现相邻两个元素的地址相差4,这是因为一个整型是相差4个字节,所以可以得出数组在内存中是连续存放的。暂且记住就行。

5.1 seizof 计算数组元素个数

1seizeof 是一个关键字,用于计算类型或者变量的大小,也可以计算数组的大小。

在程序当中使用 printf ( "%d\n", seizof ( arr ) ); 语句可以打印出数组所占内存空间的总大小,单位是字节,前面讲了一个整型的大小是4个字节,那么若是在变量为整型的数组当中,要计算元素的个数那么只需要计算出字节的总大小,然后再除以一个整型所占的字节大小,那么就可以计算出该数组的元素的总个数。

6.1 二维数组的创建

1)直接上写法:

  1. type arr_name [ 常量值1 ][ 常量值2 ]

和一维数组类似,只是这里有四个部分,多了一个常量值2

type 是指定数组中存放的数据类型,可以是 char , short , int , float 等,也可以自定义的而类型。

arr_name 是数组的名字,根据需要任意取。

[ 常量值 ] 指定的是数组中元素的个数。

2)举个简单的例子就很容易明白:

  1. int arr [ 3 ][ 4 ];

表明数组的元素类型为整型,这个数组名为 arr ,数组有三行,每一行有四个元素,事实上有点像行列式有三行四列。

7.二维数组的初始化

二维数组的初始化也可以参考一维数组的初始化,也有完全初始化和不完全初始化,但是由于多维数组比较特殊,这里还可以按照行来初始化。

7.1 完全初始化

1)就是总共有多少元素就给多少值,和一维数组初始化一样。

7.2 不完全初始化

1)不完全初始化可以直接给值:

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

在这个数组当中,我们知道一共有12个元素,但是我们只给了9个值,那么它会依次从第一排到第二排到第三排将给定初始化数字填进去,所以在这里第一排和第二排是填满的,第三排只填了第一个数字,第三排的剩下三个元素的初始值均为0。

2)不完全初始化可以按照行来给值:

  1. int arr [ 3 ][ 4 ] = {{1,2},{4,5,6},{7}}

在这个例子当中,在赋值的大括号里面,又将部分值用另外的大括号括起来了,就是外面的大括号中每一个大括号的元素都初始化依次的行当中的元素的值,在这里的三行四列就是第一行的值为1,2,0,0;第二行的值为4,5,6,0;第三行的值为7,0,0,0;认真体会一下便知。

8.二维数组的使用

1)多维数组的下标;简要来说取某个坐标的元素就是在其行列数字的基础上减去一就是其下标,例如第一行第一列元素的下标就是{0,0};第一行第二列的元素的下标就是{0,1};因为多维数组元素的行列下标和一维数组的一样都是从0开始依次增加计算的。取用形式就是数组的名字加下标号,例如名为arr的数组,取用第三行第四列的元素就是 arr [2][3]。

输入和输出参照一维数组,实例后续给出。

9.二维数组在内存中的存储

1)多维数组的存储;在学习完一维数组的存储之后,可以自行取出一个多维数组的所有元素的地址,会发现,多维数组的元素存放是按照行列依次存放的,第一行依次序存放完之后,连续接着存放第二行第一个第二个第三个...结束之后,连续接着存放第三行第四行直到结束。不同类型数值所占内存大小都不同。

10.C99中的变长数组

1)简要提及一下,在前面给出的数组当中都会直接给出了数组的个数,无论是一维数组还是多维数组,都是直接确定了数组所占内存的大小,那么实际使用过程当中,如果要随意指定一个长度,数组的大小若是可以变化,那就可以精确分配其大小长度,那这就是变长数组,也就是允许数组的常量可以用变量来代替,用变量指定数组的大小。(在vs2022上不支持变长数组的语法)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值