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]);
	
}

以上方法就是对多维数组的初始化方法,方法有很多,也可以把很多数据放在一个{}里面写成一大长行,因为存入时,每一行存满后会直接从下一行开始存,不过这样不直观(其实二维数组实质上也是排成了一大行元素)

int a[4][5] = { {0,1,2,3,4},{10,11,12,13,14},{20,21,22,23,24},{30,31,32,33,34}};

猜你喜欢

转载自blog.csdn.net/qq_51182221/article/details/114966266