原创 嵌入式微控制器C语言学习笔记21-《C 专家编程》第4章

2009-4-24 17:10 2341 5 5 分类: MCU/ 嵌入式

                            第4章  令人震惊的事实:数组和指针并不相同 


    ●数组并非指针
    “数组和指针是相同的”,这是一种危险的说法,并不完全正确。
    因为C语言中对数组的引用总是可以写成对指针的引用,而且确实存在一种指针和数组定义完全相同的上下文环境,给人造成指针和数组应该是可以互换的错觉,但并非所有情况下都是如此。
    ●什么是声明,什么是定义
    C语言中的对象必须有且只有一个定义,但它可以有多个extern声明。
    定义    只能出现在一个地方      确定对象的类型并分配内存,用于创建新的对象。它所说明的并非本身,而是描述其他地方的创建的对象。
    声明    可以多次出现     描述对象的类型,用于指代其它地方定义的对象。它为对象分配内存。
    extern对象声明告诉编译器对象的类型和名字,对象的内存分配则在别处进行。
    数组名也可用于确定对象在内存中的位置,但不能作为赋值的对象。
    数组名在编译时可知,而指针在运行时才可知。指针的访问要灵活得多,但需要增加额外的提取。
    ●数组和指针的其它区别


点击看大图


    数组和指针都可以在它们的定义中用字符串常量进行初始化,然而它们底层的机制却不相同。
    定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋值给指针一个字符串常量进行初始化。
    在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。
    数组也可以用字符串常量进行初始化。与指针相反,由字符串常量初始化的数组是可以修改的。
    指针是C语言中最难正确理解和使用的部分之一,同时也是C语言中最重要的部分之一。
       

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条