新闻  |   论坛  |   博客  |   在线研讨会
字符串数组与字符数组的区别
xiajiashan | 2012-08-29 10:20:10    阅读:1733   发布文章

看似简单的东西从来没有去怀疑过书本知识,最近我一个学生在美国亚力桑那州立大学读大二回来,问她在美国学习是否能跟上,她说口语没什么问题,只是,她每次做实验,都是把实验步骤背熟了才去了,但是美国的学生却不需要看实验步骤,他们就可以开始做,而且很成功!上次杨振宁科学家老人在演讲的时候说过,美国的学生是先有现象才去看理论,他们不相信理论,相信自己的实验结果!我并非崇阳媚外,其实很多知识点,不管是c语言,arm,单片机,linux,我最想做的是自己去编译,验证一遍别人所说的,也许这就是我在本blog基本上所有文章都是原创的原因,我喜欢参考别人的,但我跟喜欢自己去验证,研究一遍自己才放心!

者:下家山(索漫科技培训教材,原创作品,转载请注明,下家山)

一:请运行下列代码

#include

 

 

int main (void)

{

int i=0;

char str[] = "hello";

 

while(1)

{

 

if(str[i++]='\0')

{

break;

}

printf("%c",str[i]);

}

return 0;

}

二:上述代码有什么问题

请各位猜猜!!!

三: 从现象看本质

数组是一组相同类型的变量或常量的集合;

数组的定义形式:

类型 数组名[数组下标]

字符串数组,字符串数组的特征:

初始化可以在后面用双引号括起来,可以不给数组下标,如果不给数组下标,编译器自动会计算出该数组有多少个元素。并且在数组结束位置自动加上字符串结束符"\0".

char str[] = "hello";

该数组编译后,在内存中的存储形式如下:

1.jpg

这给了我们一个判断字符串结尾的标志。

四:字符数组

 

很多人以为字符数组与字符串数组是一回事。但事实并非这样,我们来看一个实例分析:

 

在show出实例前,我这里根据自己的理解给出字符数组的定义。

字符数组就是以单个字符为数组元素的数组,它与字符串数组最大的区别在于:

当定义这两种数组都不给元素个数,即让编译器自动分配空间的时候,编译器自动会在字符串数组后加"\0"结束符号,而字符数组则不会加"\0"结束符号。

五:实践是检验真理唯一的办法

#include

 

int main (void)

{

char str[] = {'H','e','l','l','o'};

char str1[] = "hello";

printf("sizeof(str[])=%d\n",sizeof(str));//此处打印结果是5

printf("sizeof(str1[])=%d\n",sizeof(str1));//此处打印结果是6

while(1)

{

if('\0'==str[i])

{

break;

}

printf("%c",str[i++]);

}

return 0;

}

运行结果

2.jpg
 

从结果我们知道,字符数组的个数是5个,编译器不会再后面加"\0"结束符,

字符串数组的元素个数是6,编译自动在后面加上了"\0"结束符。

 

 

2012-6-19 写于上海.松江

下家山

【上海索漫提供】请尊重原创,转载请注明:作者,下家山

 

 

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
02年接触ARM和ucos,开发过有线和无线图像报警器,IPCamera,人脸识别系统,OCR识别系统,指纹识别系统,05年开始从事Linux及Rtems下WiFi,camera,Ethernet等驱动开发工作,专做嵌入式linux培训,致力于把我十年来的研发经验传授给每一个学员,招人的可以找我,ximenpiaoxue4016@sina.com
推荐文章
最近访客