第十章
任务一:字符数组的定义和使用
任务二:字符数组有关函数
小结
习题
前面两章我们讲了一维数组,二维数组,但都是整数数组,那么今天我们要来学习一下“字符数组”,其实“字符数组”的使用和“整数数组”的使用相似,“字符数组”也就是多个字符连接而成,我们也可以看做是字符串,也就是一串文字,
我们可以这样定义:这样是一个一个的 字符 进行连接,输出时,我们可以用“%c”一个一个的输出字符,多个字符就组成了一句话,那么这样一个一个的输出字符肯定是非常繁琐的,所以,C语言就很巧妙的为我们提供另一个 标识符“%s”就是输出字符串但需要对应的“字符串地址”,不过 代码可不是“printf(“%s”,a[]);”这样写是不对的,我们之前讲数组时提到过“内存地址”数组名“a”代表着这一条数据的首地址,所以我们应该这样写“printf(“%s”,a);”
#include<stdio.h> int main() { char a[]={'H','e','l','l','o',' ','w','o','r','l','d','!'}; printf("%c%c%c\n",a[0],a[1],a[2]); printf("%s",a); return 0; }
我们来进行输出调试一下:
为了大家能够再一次理解数组的地址规律,我将用代码将每个字符的地址输出出来,
代码如下:
#include<stdio.h> int main() { char a[]={'H','e','l','l','o',' ','w','o','r','l','d','!'}; for(int i=0;i<12;i++) printf("元素:%c 内存地址:%d\n",a[i],&a[i]); return 0; }
代码调试截图如下:char类型为一个字节,所以内存地址依次多一
忽然有个好奇心,如果我再继续输出后面的内存地址,会发生什么呢?那么我们就让它多输出点
代码如下:
#include<stdio.h> int main() { char a[]={'H','e','l','l','o',' ','w','o','r','l','d','!'}; for(int i=0;i<20;i++) printf("元素:%c 内存地址:%d\n",a[i],&a[i]); return 0; }
代码调试截图如下:发现了其他符号,
好的,再扯都偏了,回归原来 ,我们总不能一个一个的定义字符吧?,我们还可以这样直接定义字符数组,
代码如下:
#include<stdio.h> int main() { char a[]={"Hello world!"}; printf("%s\n",a); for(int i=0;i<12;i++) printf("元素:%c 内存地址:%d\n",a[i],&a[i]); return 0; }
代码调试截图如下:
字符数组还可以这样定义:直接在定义时候设定字符数组的元素(成员),但是要注意,这里“Hello world!”为12个字符组成,但我们设定长度必须要比此长度多“1”也就是我们得设定长度为“13”,这是因为,在C语言中,一个字符串(一串字符)必须要有一个能够表示结尾的标识符“\0”,这里“\0”虽然我们看不见,但实际上是存在的,为什么要有一个“\0”作为结尾呢?
我们想一想,如果没有东西用来表示字符串的结尾,那么电脑是无法识别这句话到底有多长,就如我们之前输出的额外的地址,如果没有“\0”结尾,那么电脑将会视为“Hello world!”后面的某些字符也是我们想要输出的字符,直到电脑发现下一个标识符“\0”才停止输出
#include<stdio.h> int main() { char a[13]={"Hello world!"}; printf("%s\n",a); for(int i=0;i<12;i++) printf("元素:%c 内存地址:%d\n",a[i],&a[i]); return 0; }
代码调试截图:
我们可以尝试一下,将“a[13]”改写为“a[12]”看看会是怎么一回事,
演示截图:编译器会直接报错,大概意思是我们定义字符的长度需要加长
我们可以用“scanf(“%c”,&a[i]);”或“scanf(“%s”,a);”输入之外,还可以用“a[i]=getchar();”或“gets();”来实现
我们除了用“%c”或“%s”输出字符数组,还可以用“putchar();”或“puts();”来输出
我们分别来解释一下,
字符数组的输入:
1· scanf(“%c”,&a[i]); 就是用户输入的一个字符
2· scanf(“%s”,a); 用户输入某一串字符(字符串或者某句话)但字符长度必须小于等于定义长度减一,因为还有一个隐藏的“\0”结尾标识符,若用户输入的字符过多或字符串过长则程序会闪退!
3·a[i]=getchar(); 同 第一条一样
4·gets(a); 同 第二条一样
字符数组的输出:
1.printf(“%c”,a[i]); 输出一个字符
2·printf(“%s”,a); 输出此数组的所有字符,原理(输出内容为 首地址到“\0”)
3·putchar(a[i]); 同 第一条一样
4·puts(a); 同 第二条一样
二维字符数组的使用和前面讲的二维整数数组的使用几乎无差别,我们要具体的记着二维就是面,由“行”和“列”组成,三维就是立体,由“x”,”y”,”z”组成,本章内容,可能有点难,不过实用性小,下一页开始学习任务二“字符数组的有关函数”
评论抢沙发