C语言学习--数组学习笔记
大家好,我是什么也不会的涤生,今天我学习了C语言的数组,来分享一下。
种一颗大树最好的时间是十年前,其次是现在。
我们一起加油,一起学习~O(∩_∩)~
如有错误请指出,谢谢!
c语言中大部分的变量是具有保存单一数据的能力(叫标量),还有一种数据叫做聚合变量,它可以储存一组一组的数据,c语言中有两种聚合类型,一种是结构,另一种是数组。
一维数组
1.定义:数组是含有多个数据值的数据结构,并且每个数据都具有相同的数据类型(类型统一)。
2.数组的声明:数组的声明需要声明它的类型和数量。例如:int a[10]; 这个就是声明了一个数组,它有10个int类型的元素。
数组的类型可以是任意的类型只需修改前面 int 声明即可,数组的长度可以用任何整数常量表示,C99之后也可以用整形变量来表示(你也可以用宏,用一个const定义,这里就不细说啦http://c.biancheng.net/view/217.html可以看这个链接(侵删)),因为程序以后改变时可能需要调整数组的长度,所以较好的方法就是使用变量来表示其长度。
3.数组下标:
为了能够存取特定的数组元素,可以在写数组名时在后面用方括号里面加一个整数,这个整数值就是下标值,也是索引值。
需要注意的是,这个数组下下标值是从0开始的!
比如 int a[10]; 这个数组a是从a[0]到a[9]的。长度为n的数组元素的索引是从0 到n-1(在这件事情上,它总是偏离了一位)
4.数组小技巧-和for循环结合在一起使用的三种惯用法:
for (i = 0; i < N ;i++)
a[i] = 0;
//以上为清零操作
for (i = 0; i < N; i++)
scanf("%d",&a[i]);//注意scanf里面数组前也要用&
//以上是把数据存入数组a
for (i = 0; i < N; i++)
sum += a[i];
//计算一些数字的和
5.数组初始化:
像其他的变量一样,素组也要在声明时给它一个初始值
赋值方法有很多种,下面介绍基础的几种
(1).使用大括号括起来常量表达式:int a[5] = {1,2,3,4,5}
int a[5] = {1,2,3}等价于int a[5] = {1,2,3,0,0}即如果初始化式比数组短,那么素组中剩余的元素就是0(但是初始化式比数组长度长是非法的!)
利用上述特性可以int a[5] = {0};注意{}里面不能为空!
(2). 指定初始化式
考虑下面这个例子
int a[8] = {0,0,2,0,3,0,0,0}
希望a[2] = 2、a[4] = 3,我们可以int a [8] = {[2] = 0,[4] = 3};这样的方法是使用了指示符进行赋值int a [8] = {[2] = 0,[4] = 3};中的括号里的2、4就是指示符,指示符必须是整形常量表达式。
6.数组的sizeof运算符(很有用哦)
运算符sizeof可以计算素组的大小(算出来是一个字节数),你可能会想,这和我有毛关系!反正我第一次是这么想的,下面我们说说它有什么用
先看一个式子
int a[10] = {0};
for (i = 0; i < sizeof(a)/sizeof(a[0]);i++)
{a[i] = 0;
}
sizeof(a)/sizeof(a[0])表示的就是数组的长度,我们在需要数组长度时往往使用这个表达式
不过有的编译器可能会对sizeof(a)/sizeof(a[0])提出警告,因为变量i的类型可能是有符号而sizeof的结果是一种无符号类型。
当然如果你愿意的话可以(int) sizeof(a)/sizeof(a[0])对它进行强制类型转化
7.传参时要注意的点
数组作为函数参数时,要用另一个参传入x数组大小,因为在声明函数参数时不能用sizeof计算数组元素的个数!
声明函数是参数a[]的方括号中不能有东西!
8.多维数组
1.定义:数组可以有任意维数,例如下面声明的一个二维数组(数学中的矩阵)int a[5][8] ;数组有5行8列,这样的数组去访问它的元素时都写成i[m][n]的形式。
2.多维数组的初始化:
#include<stdio.h>
int main()
{
int a[5][6] =
{{1,2,3,4,5,6},
{2,0,0,0,0,0},
{3,0,0,0,0,0},
{4,0,0,0,0,0},
{5,0,0,0,0,0}};
printf("%d",a[0][2]);
}
以上方法就是对多维数组的初始化方法,方法有很多,也可以把很多数据放在一个{}里面写成一大长行,因为存入时,每一行存满后会直接从下一行开始存,不过这样不直观(其实二维数组实质上也是排成了一大行元素)
、
上一篇: c语言 数组与指针的那些事
下一篇: C语言学习笔记(6)数组