C语言学习10:数组

目录

1.数组的基本概念
1.1 数组
1.2 下标
1.3 数组各元素的内存连续
1.4 数组初始化
2.数组使用的注意事项

1.数组的基本概念

1.1 数组

一系列 相同类型的数据 在内存中依次存放的 集合,称为 数组。它所包含的每一个数据叫做数组 元素,所包含的数据的个数称为 数组长度

例如

char arr[4];//包含4个字符型元素的数组

char 表示该数组的类型为字符型。
arr 为该数组的名称。
[4] 表示该数组包含4个相同类型的元素。

注意:数组中每个元素的数据类型必须相同,且与数组定义的类型一致

———————————————————————————————————————
1.2 下标

数组中的每个元素都有一个序号,这个序号从0开始,称为 下标

例如

char arr[4] = {'a', 'b', 'c', 'd'};

根据该数组只有4个元素,可知该数组具有4个 下标,即0、1、2、3。所以可得出以下关于每个不同的 下标 所对应的元素:
char arr[0] = ‘a’;
char arr[1] = ‘b’;
char arr[2] = ‘c’;
char arr[3] = ‘d’;

注意:访问数组元素时,下标不能超过规定的取值范围,过大或过小都会越界,从而导致数组溢出,引发一定的错误

———————————————————————————————————————
1.3 数组各元素的内存连续

数组是一个整体,它的各个元素之间的内存是连续的。

char arr[0] char arr[1] char arr[2] char arr[3]
a b c d

该特性需要牢记在心,在之后 指针 的操作中,会有地方需要使用到这一特性。

———————————————————————————————————————
1.4 数组初始化

数组元素的值由" { } " 包围,各个值之间以" , " 分隔

① 整型数组

int arr[4] = {1, 222, 23, 67};//定义数组的同时,给每个元素赋值整型数据

② 字符型数组

char arr[4] = {'a', 'b', 'c', 'd'};//定义数组的同时,给每个元素赋值字符型数据

③ 浮点型数组

float scores[10] = {0.0};//定义数组的同时,给每个元素赋值浮点型数据

④ 部分元素赋值,未赋值部分自动初始化为0

int arr[10] = {1, 222, 23, 67};//定义数组的同时,给部分元素赋值整型数据
// arr[0] = 1; arr[1] = 222; arr[2] = 23; arr[3] = 67;
// 此时arr[4]~arr[9] 被自动初始化为0

/* 对于short、int、long,未赋值部分自动初始化为整数 0
   对于char,未赋值部分自动初始化为字符 '\0'
   对于float、double,未赋值部分自动初始化为小数 0.0
*/

⑤ 所有元素初始化为 0

int num[10] = {0};
char arr[10] = {0};
float scores[10] = {0.0};
/* 该赋值方法相当于赋值 num[0] = 0; arr[0] = '\0'; scores[0] = 0.0; 
   而其他9个元素由其自动赋值 0 或 '\0' 或 0.0

⑥ 由"⑤"可知,只有 0 或 '\0' 或 0.0 可以采取集体赋值的方法,而要赋值 0 或 '\0' 或 0.0 之外的数据,必须对每个元素逐个赋值。若只给整型数组全部赋值1,需采用如下方式:

int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
// 使用此方法赋值 arr[0]~arr[9] 都为1
int a[10] = 1;
// 使用此方法赋值 arr[0] = 1; arr[1]~arr[9] 都为0

⑦ 给全部元素赋值,在定义数组时可以不给出数组长度

int num[] = {1, 2, 3, 4, 5};

等价于:

int num[5] = {1, 2, 3, 4, 5};

2.数组使用的注意事项

输入

#define _CRT_SECURE_NO_WARNINGS 1                          
                                                                                                             
#include <stdio.h>                                                                          
                                                                                                             
int main()                                                                                           
{                                                                                                     
   char arr1[] = "abc";// "abc" -- 'a' 'b' 'c' '\0'      	 
   // '\0'是字符串的结束标志                                           
   char arr2[] = {'a', 'b', 'c'};// 'a' 'b' 'c'	       	 
   printf("%s\n", arr1);	                                                           
   printf("%s\n", arr2);	                                                          
   return 0;	                                                                                   
}                  

输出出现乱码
在这里插入图片描述
不难发现,arr1[]的输出结果 正常,而arr2[]的输出结果里出现了 乱码。造成这种现象的原因是,arr1[]用此定义方法,定义的 arr1[0] = ‘a’; arr1[1] = ‘b’; arr1[2] = ‘c’; arr1[3] = ‘\0’; 。而arr2[]的定义方式,定义的 arr1[0] = ‘a’; arr1[1] = ‘b’; arr1[2] = ‘c’; arr1[3] = 随机值; 。导致了乱码的出现。

解决办法:将char arr2[] = {'a', 'b', 'c'}; 改为 char arr2[] = {'a', 'b', 'c', 0};

#define _CRT_SECURE_NO_WARNINGS 1                          
                                                                                                             
#include <stdio.h>                                                                          
                                                                                                             
int main()                                                                                           
{                                                                                                     
   char arr1[] = "abc";// "abc" -- 'a' 'b' 'c' '\0'      	 
   // '\0'是字符串的结束标志                                           
   char arr2[] = {'a', 'b', 'c', 0};// 'a' 'b' 'c' '\0'       	 
   printf("%s\n", arr1);	                                                           
   printf("%s\n", arr2);	                                                          
   return 0;	                                                                                   
}                  

输出预期结果成功
在这里插入图片描述

—————————END—————————

往期回顾

★C语言学习5:机器数、真值、原码、反码和补码详解

★C语言学习6:数据类型 -> 基本类型 -> 整型类型(int、short int、long int、char等)

★C语言学习7:ASCII码表及用法简介

★C语言学习8:全局变量和局部变量

★C语言学习9:This function or variable may be unsafe. (Visual Studio 2013关于scanf函数报错的解决办法)

你可能感兴趣的:(C语言学习笔记,c语言,开发语言,后端)