C语言轻松学习-10

第十章

任务一:字符数组的定义和使用

任务二:字符数组有关函数

小结

习题

前面两章我们讲了一维数组,二维数组,但都是整数数组,那么今天我们要来学习一下“字符数组”,其实“字符数组”的使用和“整数数组”的使用相似,“字符数组”也就是多个字符连接而成,我们也可以看做是字符串,也就是一串文字,

我们可以这样定义:这样是一个一个的 字符 进行连接,输出时,我们可以用“%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”组成,本章内容,可能有点难,不过实用性小,下一页开始学习任务二“字符数组的有关函数”

1 2 3 4
分享到:
赞(0)

请选择你看完该文章的感受:

7瞧一瞧 1扯淡 6学到了 2不懂 8正能量 1无聊

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (选填)