上一次为大家讲解了一维整型数组,我相信大家对数组也有了一个初步的认识和理解,那我们今天就继续数组的一个深入学习,为后面的学习做好一个铺垫。
讲解完一维整型数组,下一个为大家讲解的是:一维字符型数组,简单的说:就是用来存储字符串的,那我们赶紧开始吧!
1、一维字符型数组
1.1 概念
在C语言用来存放字符串的类型
1.2 定义
数组类型 数组名[元素个数]
eg:
char str[32];
注意:
元素个数必须为常量 或常量表达式
元素个数 >= 要存储的字符串的字符个数(不要忘了每个字符串后有个默认的'\\0',也算一个字符)
1.3 数组元素访问
数组名[元素下标]
str[0]
str[n]
str[1 + n]
注意:
元素下标为: 0 — 元素个数 -1
1.4 字符数组初始化
初始化 != 赋值
char str[6] = {0};
str[6] = "hello"; //错误
1、全部初始化
char str[6] = {'h', 'e', 'l', 'l', 'o', '\\0'};
char str[6] = "hello"; // {"hello"}
2、局部初始化
char str[6] = {'h', 'e', 'l'};
char str[6] = "hel";
char str[6] = {0}; //将str数组清0,也就是'\\0'
注意:
局部初始化中没有给定初值的元素为0值,即'\\0'
3、默认初始化
char str[] = {'h', 'e', 'l', 'l', 'o'}; //5个字符
char str[] = {"hello"}; //6个字符
1.5 字符数组的存储
字符数组占空间大小 = 数组元素个数
特点:
1. 连续性
存放数据的空间连续
2. 有序性
存放数据的顺序是有序的
1.6 字符串的打印
1、printf
printf("%s\\n", str);
//%s: 将str数组开头到第一个\\0中间的字符全部打印
2、puts
puts(str); //会比printf多打印一个\\n,打印一行字符串,自动换行
1.7 字符串的接收
1、scanf
scanf("%s", str);
2、gets
gets(str);
1.8 字符串常用函数
首先,我们在使用下面这些函数时,都需要包含一个头文件,才可以正常使用:
#include<string.h>
1.8.1 strlen
一般形式:
strlen(字符数组)
功能:获取字符串长度(从字符串开头到\\0中间元素的个数,不包含\\0)
示例:
char str[32] = "hello";
int len = 0;
len = strlen(str); //获取str字符串的长度
1.8.2 strcpy
一般形式:
strcpy(字符数组1,字符串2)
关键:当检测到源字符串的'\\0'时,会将这个'\\0'也拷贝到目标字符串的末尾,然后停止拷贝操作。
功能:将源字符串拷贝到目的空间
示例:
char str[32] = {0};
char str1[32] = "hello world";
strcpy(str, "hello world");
strcpy(str, str1);
注意:
1. 目的空间的长度 不应小于 源字符串的长度
2. “字符数组1”必须写成数组名形式,“字符串2”可以是字符数组名,也可以是一个字符串串常量
3. 不能用赋值语句将一个字符串常量或者字符数组直接给一个字符数组:
str1 = "china"; //企图用赋值语句将一个字符串常量直接赋值给一个字符数组
str1 = str2; // 企图用赋值语句将一个字符数组直接赋值给另一个字符数组
1.8.3 strcat
一般形式:
strcat(字符数组1, 字符数组2);
功能:将第二个字符串拼接到第一个字符串的末尾
示例:
char str1[32] = "hello";
char str2[32] = " world";
strcat(str1, str2);
strcat(str1," world");
注意:
1. 字符数组1必须足够大,以便容纳连接后的新字符串
2. 连接时将字符串1后面的'\\0'取消,只在新串最后保留'\\0'
1.8.4 strcmp
一般形式:
strcmp(字符串1,字符串2)
功能:比较两个字符串是否相同,相同返回0;
如果第一个字符串 > 第二个字符串 返回一个正整数;
如果第一个字符串 < 第二个字符串 返回一个负整数
示例:
strcmp(str1,str2);
strcmp(str1, "beijing");
strcmp("askhfd", "dfshk");
比较规则:
将两个字符串自左至又逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或者遇到'\\0'为止。
到此,一维字符数组也基本给大家讲解完了,接下来就升阶到二维的学习,还是一样,先来给大家讲解二维整型数组:
2、二维整型数组
2.1 定义
数据类型 数组名[行个数][列个数]
//与一维一样,行个数与列个数只能为常量或者常量表达式
int a[2][3];
2.2 元素访问
数组名[行下标][列下标]
a[0][0]
2.3 元素初始化
1. 全部初始化
int a[2][3] = {{1,2,3},{4,5,6}};
int a[2][3] = {1,2,3,4,5,6};
2. 局部初始化
int a[2][3] = {{1},{2}}; //a[0][0] = 1, a[1][0] = 2;其余均为0
int a[2][3] = {1,2,3}; //a[0][0] = 1, a[0][1] = 2,a[0][2] = 3;其余均为0
int a[2][3] ={0}; //均初始化为0
3. 默认初始化
int a[][3] = {1,2,3,4,5,6} //a[2][3]
int a[][3] = {{1,2},{3}} //a[2][3]
int a[][3] = {1,2,3} //a[1][3]
注意:
二维数组默认初始化:行能省略,列不能省略
2.4 二维整型数组的存储
1.连续性:数组空间连续
数组大小 = 元素类型所占空间大小 * 行数 * 列数
2.有序性:逐行从左到右依次存储
3.单一性:数组元素类型一致
二维数组的本质:
二维数组:是一维数组的数组
到此,二维数组的一些基本内容也为大家讲解完了,数组的内容也就先到这里了,如果有需要,后面也会为大家补讲其余相关的内容内容,因为我们不能止步与此,专门去研究数组,还得继续往下走,时间不等人,现在给大家讲到的目前也基本够用了,下次我将为大家进行一个函数的讲解,敬请期待。
最后:如果觉得博主讲得不错的,点点赞,一键三连,各位伙伴如果发现有错误的地方或者有不同想法的,欢迎各位在评论区进行讨论!
网硕互联帮助中心




评论前必须登录!
注册