学习笔记 C语言 字符数组

这篇博客探讨了C语言中的字符数组,包括数组初始化、字符常量与字符串常量的区别、内存占用以及字符串处理函数。作者强调了字符数组初始化时末尾自动填充'',并指出字符数组不能通过赋值语句直接接收字符串。同时,提到了二维字符数组的概念,并鼓励读者通过实践加深理解。

数组中的字符数组和排序算法的相关知识点,以思维导图的形式呈现:

在这里插入图片描述

其中补充几点在思维导图中没有呈现出来的:

字符数组的引用:

char a[7];
a[0]='C'; //直接给数组元素a[0]赋值
scanf("%c",&a[0]); //从键盘输入数据给数组元素a[0]
printf("%c",a[0]); //输出数组元素a[0]的值

初始化

字符型常量初始化:

char a[8]={'c','1','2','3','23','acv',}

a[0]='c'、a[1]='1' ......

尤其注意 初始化时,花括号中的初值小于数组长度,剩下的元素初值为空字符(’\0’)

以上例:a[8]=‘\0’;

思考:‘A’ 和 “A” 有什么区别?
这个问题可以加深理解字符常量和字符串常量之间的区别;

首先字符常量用’ '表示、字符串常量用" "表示;

字符串在内存中占两个字节的存储空间——别忘了’\0’

字符串常量

char a[]="China";
等价于:
char a[6]={'C','h','i','n','a','\0'}; 

同数值型数组一样,也存在二位字符数组:

char str[3][5]={"C","math","VC"}

上述二维数组有3行5列,每一行相当于一个一维字符数组,

在这里插入图片描述

误区:
字符数组可以初值化,但是不能赋值语句将字符串直接赋值给字符数组。

char num[12]; //学号
num[12]="12345678901"; //错误赋值

char num[12]="12345678901";//正确赋值

字符串处理函数:

使用格式函数功能额
strlen(str)求字符串str长度,但会不包括串结束符’\0’在内的个数——也就是计算字符串长度,其中不包括字符串结束标志
strcat(str1,str2)将字符串str2连接到字符数组str1后面,返回str1——str1=“str1str2”
strcmp (str1,str2)比较两个字符串的大小 str1>str2 返回正数 ;str1==str2 返回0 ;str1<str2,返回负数
strcpy(str1,str2)将字符串str2复制到字符数组str1中,返回str1

你可以再通过这道题来加深理解:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[30]="abc";
	char str2[]="123";
	strcat(str1,str2); //将字符串str2链接到字符数组str1后面,返回str1
	printf("%s\n",str1);
	printf("%d\n",strlen(str1)); //求str1长度
	strcpy(str1,str2); //str1=str2
	printf("%s\n",str1); 
	printf("%d\n",strcmp(str1,str2)); //比较str1和str2大小
}

话说当才疑惑了一下 “字符串”&“字符数组”,两者是等价关系哦~

谢谢你看到这里,有什么问题可以留言,我们一起交流~ see u tomorrow!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值