数组不是字符串

   在C语言中我们知道没有字符串这种数据类型,所以为了表示字符串,我们一般会使用char类型的数组来表示,这就导致刚开始的时候我们会以为数组和字符串时一样的,其实并不然,数组是数组,字符串是字符串;

  数组是什么,数组是固定内存块大小的别名,它是一个可自定义内存大小的数据类型;

  我们知道strlen可以算出字符串中数据的个数,sizeof可以算出变量所占据的内存大小;

  

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 void main()
 6 {
 7     char a[] = {'a','b','c','d','e'};//一维数组,并不是以'\0'为结尾的字符串,
 8     char a_1[] = "abcde";//字符串,分配了六个字节空间
 9 
10     printf("sizeof(a):%d,strlen(a):%d\n",sizeof(a),strlen(a));//5   strlen(a) > sizeof(a)
11     printf("a_1:%d,strlen(a_1):%d\n",sizeof(a_1),strlen(a_1));//6    5
12     printf("a:%s\n",a);//没有自动结束的能力,会打印出abcde 和 一堆乱码
13     printf("a_1:%s\n",a_1);//打印出abcde
14 
15     system("pause");
16 }

  从这几行代码中我们可以发现,同样是往一个一维数组中导入abcde,char a[] = {'a','b','c','d','e'}是数组,char a_1[] = "abcde",那么数组和字符串的区别在哪?

  我们可以看到:数组存入数据的个数大于分配的空间数,strlen这个函数,统计字符数据个数时遇到NULL或者'\0'才会停下来,所以也就是说,内存中的乱码也会被认为是存入的数据;

  但是字符串会在后面隐式的写入一个'\0',也就是,字符串终止符,所以它的长度是6,存入的数据长度是5,;

  于是这时候就有人会想这样写char a[] = {'a','b','c','d','e','\0'};加一个0不就好了,这样一看的话确实是样的,但是我们前面说过,C语法中没有字符串这一说法,为了表示它我们通常使用数组来表示,

  那么问题就来了,请问2.0000 = 2这个说法能说明2.0000和2是一样的么?当然不行,虽然他们的数值相等。但是一个是小数,一个是整数,类型都是不一样的虽然相等却不能说明他们是同一种数据类型;

posted @ 2017-11-08 23:20  SmartGame  阅读(375)  评论(0编辑  收藏  举报