DD的笔记 https://bbs.21ic.com/?380154 [收藏] [复制] [RSS] 专心、专业、专注,嵌入式系统应用经验分享。

日志

我对C语言中数组本质的理解

已有 1080 次阅读2012-12-18 17:32 |系统分类:单片机| C语言, 数组

我对C语言中数组本质的理解


2012-12-19  ODD


     在单片机C语言程序设计中,在通信和数据采集应用中,都离不数组。对于长数据帧的出来还需要数组和指针的融合应用。


    就本人的理解,数组和指针联系紧密,但有有所区别。


   


    1.在C语言中,对于一个数组,我们只能做两件事情:


        A. 确定该数组的大小(数组的大小必须在编译器就作为一个常数确定下来)


        B. 获得指向该数组下标为0的元素的指针。(其他的数组操作,实际上都是通过指针进行的)


 


    2. C语言中,数组的元素可以是任何类型的对象,也可以是另外一个数组。因此,二维数组实际上是元素为一维数组的一维数组。


    例如: int  a[12][31];


    该语句声明了一个数组,该数组拥有12个数组类型的元素;其中每个元素都是一个拥有31个整型元素的数组。


 


    3. 如果我们在应该出现指针的地方,采用数组名来替换,那么数组名就被当作指向该数组下表为0元素的指针。


    例如:  int  *p;


                int  a[3];


                p = a;                //把数组a中下标为0的元素的地址赋值给p。


    如果写成p = &a;在C语言中是非法的,因为&a是一个指向数组的指针,而p是一个指向整形变量的指针,它们的类型不匹配。


 


    4.  如果一个指针指向的是一个数组中的元素,那么,给这个指针加1,就能得到指向数组下一个元素的指针。


    注意:给一个指针加上一个整数,与给该指针的二进制表示加上同样的整数,两者截然不同。


    例如:int  *p;  (假设int是4个字节,p指针的二进制表示为:0x00005611)


               p+2,指针指向的内存位置为:0x00005619


               二进制+2,指针指向内存为:0x00005613


   


    5. int  a[10]; 


        *a = 8;就是将数组a中下标为0的元素的值设置为8。


        同理,*(a+1)就是对数组小标为1的元素的引用。


        以此类推,*(a+i)就是对数组a中下表我ii的元素的引用。这种用法相当常用,因此被简记为a


        所以,大家要知道实际上,a 的本质是 *(a+i)。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)