C语言学习——数组

目录

一、初探程序中的数组

1.数组的概念

2.数组的定义

 3.数组元素的访问

二、数组特性深入剖析

1.数组的初始化

2.数组的内存分布

三、多维数组

1.多维数组的定义

2.数组类型

3.二维数组

4.多维数组初始化注意事项


一、初探程序中的数组

1.数组的概念

数组是相同数据类型变量的有序集合
—数组作为整体需要一个合法的命名(数组名)
—数组中的变量没有独立命名,只有在数组中的编号
—数组中的变量数量是固定不变的(数组大小固定)

2.数组的定义

语法:tpye Name [ size ]

示例: 

int arr1[10]; //定义名为 arr1 的数组
              //数组中一共有 10 个元素
              //每个元素的类型为 int

double farr[5]; //定义名为 farr 的数组
                //数组中一共有 5 个元素
                //每个元素的类型为double

 3.数组元素的访问

a.通过数组名 [下标] 的方式来访问元素
b.数组是一个有序的集合,每个元素有固定的下标
c.数组元素下标固定从0开始(可以使用变量作为下标)

示例:

int arr1[3];

arr1[-1] = 0; //ERROR

arr1[0] = 1;
arr1[1] = 2;
arr1[2] = 3;

arr1[3] = 4; //ERROR


 注意事项:

1.只有整型数才能作为数组的下标访问元素
2.下标越界是一种非常严重的编辑错误(工业级BUG来源)
3.下标越界带来的后果可能不会立即体现

二、数组特性深入剖析

1.数组的初始化

—语法:type Name [N] = { V0, V1, ... , Vn-1};
—意义:将数组中的元素分别初始化为 V0, V1, ... , Vn-1
int main ()
{
   int arr[5] = {2,4,5,5,6};
   int i = 0;
   for (i = 0 ;i<5 ;i++)
   {
       printf("arr[%d] = %d \n", i, arr[i]);
   }
   return 0;
}

数组初始化技巧

(1)自动确认数组大小
type Name [] = {V0, V1, ... , Vn-1};

(2)将部分数组元素初始化为0
/* s < N ,未指定初始值的元素默认为0*/
type Name [N] = {V0, V1, ... , Vs};

(3)将全部元素初始化为0
type Name [N] = {0};

2.数组的内存分布

数组在计算机底层是一片连续的内存,用于储存数组元素
—数组的大小字节数可以用sizeof()获取(单位为字节)

计算数组大小

type Name [] = {V0, V1, ... , Vn-1}; // 一共n个元素
sizeof(Name)/ sizeof( Name[0] ); // 计算结果为n

注意:
1.数字名只能作左值使用(可以看作常量)
2.只能使用整型常量对数组大小进行定义
3.只能使用整型值对下标访问数组元素

int size; //初始值多少?
int arr[size]; //数组大小多少?
int a[5] = {0};
arr[1.5] = 1; //第1.5个变量是哪个
arr = a; //常量不能作左值

三、多维数组

1.多维数组的定义

多维数组的定义格式是:
数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n];

       定义了一个名称为num,数据类型为int的二维数组。其中第一个[3]表示第一维下标的长度,就像购物时分类存放的购物;第二个[3]表示第二维下标的长度,就像每个购物袋中的元素。

2.数组类型

多维数组的初始化与一维数组的初始化类似也是分两种:

(1)数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n] = {{值1,…,值n},{值1,…,值n},…,{值1,…,值n}};
(2)数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n]; 数组名称[下标1][下标2]…[下标n] = 值;

数组类型
-数组类型由元素类型和数组大小共同决定
-数组类型的具体表现形式为 : type [N]

int a[10] = {0};   //类型:int [10]
float b[5]  = {0}; //类型:float [5]
int aa[5] = {0};   //类型:int [5]
float bb[8] = {0}; //类型:float [8]
int c[10] = {0};   //类型:int[10]
int i;
for(i=0;i<10;i++)
   c[i]= a[i];     //相同类型数组的“赋值操作!

数组中的元素可以是变量,也可以是其他程序元素

当数组中的元素是另一个数组时,就构成了多维数组

3.二维数组

C语言中的二维数组定义:tape Name [N1] [N2];

二维数组可以看作数学中的矩阵:

C语言学习——数组_第1张图片

示例

int a[3][4];       //定义一个数组,数组中有 3 个元素
                   //每个元素的类型为 int[4]
a[1][2]= 2;        //对第 1 个数组中的第 2 个变量赋值
a[2][3]= 2;        //对第 2 个数组中的第 3 个变量赋值
a[3][0]= 2;        //越界
a[0][4]= 2;        //越界

 注意:

— 二维数组的本质还是数组,即:数组中的每一个元素是数组!!!

— 二维数组能且仅能让编译器自动确认第一维

4.多维数组初始化注意事项

多维数组初始化要注意以下事项:

采用第一种始化时数组声明必须指定列的维数。mtianyan: 因为系统会根据数组中元素的总个数来分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数;
采用第二种初始化时数组声明必须同时指定行和列的维数。
二维数组定义的时候,可以不指定行的数量,但是必须指定列的数量。

你可能感兴趣的:(C语言学习,c语言,学习,算法)