目录
字符数组长度和字符串长度的区别:
数组不能整体操作。
字符数组长度:
字符数组长度指的是装字符串所开内存空间的大小,其中字符串自带的结束标志位也要算在其中。
eg:
char s[] = "hello";
其中s的长度就叫做字符数组长度,其长度为6
可以使用sizeof(s)来获取他的长度 //注:sizeof的返回值类型为long,与之匹配的占位符是ld
但注意:
1.sizeof计算的是占内存空间字节数。由于一个字符型元素占1个字节,所以可以直接当作长度来看
2.只能用来求在定义时没有确定字符长度的这一种情况(即上方),如果在定义时在[]
内已经定义了长度,则其返回值就是定义的长度数。
字符串长度:
字符串长度指的是未计算结束标志位的整个字符串字符数。
eg:
char s[] = "hello";
其中s所代表的字符串长度位5。
字符串函数:
在使用字符串函数时要加上头文件<string.h>.
strlen函数
语法:
size_t strlen(const char *s)
功能:计算字符串长度
返回值:其返回值是字符串字符串长度
参数: s //表示一个指针
//其可以是一个字符数组名也可以是字符串常量
···································································
使用例子:
int len;
char a[10] = "hello";
len = strlen(a);
或
len = strlen("hello");
其输出结果都是5
strcpy函数
语法:
char *s strcpy(char *dest , char*src)
功能:复制字符串,将src的字符串复制到dest中
返回值:没有返回值
参数:dest //目标字符数组
//只能是字符数组名
src//原字符串
//其可以是字符串常数也可以是字符数组名
·······································································
使用例子:
char a[10] ="hello";
char b{10} ;
strcpy(b,a);
或
strcpy(b,"hello");
上述输出字符数组b都是hello.
strcat函数
语法:
char *strcat(char *dest,const char *src)
功能:将两个字符串拼接起来
返回值:修改后字符串的指针
参数:dest //要被拼接过去的字符串
//其只能是字符数组名(因为字符串常量是不可以修改的)
src //拿来拼接的字符串
//其可以是字符数组名也可以是字符串常量
~····································································
使用例子:
char a[20] ="hello";
char b[10] ="world";
strcat(a,b)
或
strcat(a,"world");
上述两种方式输出的a都是"helloworld"
字符串的比较
原理:
从左到右逐个比较字符串ascii码的大小,直到出现不同字符或者结束标志位位置,比较结果以第一个不同字符的比较结果为准。
理解:从左到右逐个比较字符串,直到出现两个字符串中取出的字符ascii码不一致,然后把这两个的ascii码做比较
比较函数:
语法:
int strcmp(char *s1,char *s2)
功能:比较字符串大小
参数:s1// 字符串
s2//字符串
//其可以使字符串常量也可以是字符数组名
返回值:最后停下位置进行做差,用s1-s2,得到的数值就是返回值
当返回值 >0 s1大于s2
<0 s1小于s2
=0 s1等于s2
····································································
使用例子:
char a[10] ="hello";
char b[10] ="help";
strcmp(a,b);
或
strcmp("hello","help");
其中比较结果都为l的ascii码值减去p的ascii码值
二维数组
二维数组的构成元素:
[类型说明符] + [数组名] + [常量表达式1] + [常量表达式2]
类型说明符:
用来说明二维数组元素的数据类型
数组名:
数组名即标识符
[常量表达式1][常量表达式2]
其中常量表达式1意义是二维数组的行
常量表达式2意义是二维数组的列
其中常量表达式1可以不写,但是常量表达式2必须定义
原因见下二维数组的本质。
使用例子:
int a[3][4]; //其意义就是定义了一个数据类型为int型的3行4列的二维数组
数组的初始化:
全部初始化:
使用例子:
int a[2][2] = {0,1,2,4};
或者
int a[2][2] = {{0,1},{2,4}};
部分初始化:
使用例子:
int a[2][2] = {0,1};//未初始化的部分自动以0填充
或者
int a[2][2] = {{0},{2}};//其意义指的是只初始化第一行的第一个和第二行的第一个位置的数
二维数组的引用:
语法:
数组名[表达式1][表达式2]
其引用是一个一个以字符数组的形式引用不能整体操作。
二维数组的本质
数组也是一种数据类型
例如 int a[3][4] 其本质可以看做是 int[4] a[3] //a[3][4]为 int[4] 数据类型的一维数组a[3].
同时其列必须要进行定义也是因为其列涉及到其数据类型,因此不能更改。
二维数组在存储空间中的原理:
对于二维数组含义的注意事项:
1.c语言中是不存在真正的二维数组的
2.其本质是一个一维数组类型的一维数组
3.其存储方式优先以行进行存储
多维数组:
int a[3][4][5] 其本质可以看做是 int[4][5] a[3] //a[3][4][5]为 int[4][5] 数据类型的一维维数组a[3].
由此也可推断n维数组就是n-1维字符数组类型的字符串。