字符串和二维数组

字符数组长度和字符串长度的区别:

数组不能整体操作。

字符数组长度:

字符数组长度指的是装字符串所开内存空间的大小,其中字符串自带的结束标志位也要算在其中。

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,12,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维字符数组类型的字符串。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值