原创 字符串数组与字符数组的区别

2012-7-3 15:26 2233 22 30 分类: 消费电子

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

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

一:请运行下列代码

#include

 

int main (void)

{

    int i=0;

    char str[] = "hello";

 

    while(1)

{

  

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

        {

            break;

        }

        printf("%c",str);

    }

    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)

        {

            break;

        }

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

    }

    return 0;

}

 运行结果

2.jpg
 

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

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

 

 

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

                                    下家山

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1742642 2014-6-6 21:16

非常好~!

用户1069018 2014-6-6 10:41

谢谢分享.

用户1069018 2014-6-6 10:40

谢谢分享.

用户1555457 2012-7-4 10:56

这个对初学者非常有用!

用户1192301 2012-6-28 00:36

学习了

用户1580159 2012-6-26 23:38

hao

用户1398946 2012-6-25 10:53

这是我个人认为美国人发明创新的源泉,与我们中国的教育思维正好相反。 能与现么美国人相比美的中国历史阶段,只有中国春秋和战国时代的士。

用户1190942 2012-6-25 10:15

hao

用户1190942 2012-6-25 10:15

hao

用户1190942 2012-6-25 10:12

hao
相关推荐阅读
用户1037328 2016-04-17 17:59
好的理论可以避免犯错——读《丈量世界》有感!
     《丈量世界》,早就因为仰慕高斯而想看这本书      1.殊途同归      这本书写的是高斯和洪堡两个人,为什么要把这两个人放在一起写呢?因为高斯是一个宅男,不喜欢什么旅游,考察!他觉得...
用户1037328 2016-04-05 09:10
叛逆在爱因斯坦性格中的重要性(一)
叛逆在爱因斯坦性格中的重要性(一) 《爱因斯坦传》读书笔记      昨天晚上,读完了2016年书单的第二部书,《爱因斯坦传》。我想梳理一下自己读这本书的收获,或者说感悟!在读这...
用户1037328 2016-04-05 09:09
叛逆在爱因斯坦性格中的重要性(二)
叛逆在爱因斯坦性格中的重要性(二) 《爱因斯坦传》读书笔记                                四  叛逆性 在爱因斯坦的同时期科学家中,我想比他IQ...
用户1037328 2014-07-09 19:55
RTEMS系统时钟原理
作者,下家山(转载请注明作者及出处,请尊重原创)   专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 一:从应用看原理      每个...
用户1037328 2014-07-09 19:47
RTEMS在S3C2410上的移植(一)
作者:下家山(转载,请注明) 1:RTEMS开发环境建立 1.1开发环境建立前的准备工作 因为RTEMS开发环境主要用的是GNU的工具链,所以需要一台装有Linux的HOST. 1.2...
用户1037328 2014-07-09 19:45
深入浅出学Makefile<三,如何自动生成Makefile>
(请尊重原创,转载请注明,作者:下家山) 五: 运行make编译得到可执行文件 root@parson-desktop:/home/parson/tmp/automk# make gcc ...
EE直播间
更多
我要评论
8
22
关闭 站长推荐上一条 /3 下一条