网站首页 >> 美食攻略 >> 正文
简介: 前一篇文章已经介绍了指针,接着介绍一下数组。大家都明白这里定义了一个数组,其包含了3个int型的数据。那么同样的问题,这组数据存储的地址该如何读取,存储的数据又该如何存取呢同样我们假设在8bit-C5

数组的定义方法(十、c语言之数组)

前一篇文章已经介绍了指针,接着介绍一下数组。

大家都明白这里定义了一个数组,其包含了3个int型的数据。那么同样的问题,这组数据存储的地址该如何读取,存储的数据又该如何存取呢

同样我们假设在8bit-C51单片机的应用环境下定义一组数组inttable[3];其意思就是在存储器中给6byte的空间取了个名字(变量名称)叫table,这里一定要注意,数组变量的名称只有一个,那就table,而table[0]/table[1]/table[2]组成变量的元素,它并不是变量的名称,简单点说,编译器只会认table以及分配给它6byte空间。

同样举个例子,我们来到某个城市去找酒店,我们肯定是按照酒店的名字去寻找,而数组的名称(table)就是整个数组酒店的名称,这个酒店肯定是按房号一间间的排布在这个酒店里的,这就像组成数据的元素名称,所以我们通常说的是某某酒店几号房间,你就能顺利找到房间里你要找的人或物了。所以这么理解来说的话,你要取某个数组元素里面的值,就得先确定数组名称(比如table),再找到元素编号(比如1),所以table[1]就是你要找的存储器里面该数组编号为2的值了。同一个城市或许酒店的名称有相同的,所以你要准确找到这个酒店的话,除了名称之外,你更好还需要有导航图,而&table就是你要找到这个酒店的准确地址了,&像不像大家导航的路线,所以&table就是这组数组的首地址了。举例只是方便大姐理解,不必过于较真。

总结来说,定义一个一维数组之后inttable[3];

&table:代表这个数组的首地址

table[0]/table[1]/table[2]就是组成数组的三个元素的值。

那么&table[0]又是什么意思呢?

&table[0]和&table的区别

这里&table[0]和&table到底有什么区别呢?table[0]是一个元素,table是整个数组,虽然&table[0]和&table的值一样,但两个地址指的数据类型不一样,数组的地址指向类型是整个数组,数组之一个元素的地址指向类型是之一个元素。

C语言中数组首地址和数组之一个元素的地址关系如下:

2、第1个元素的地址如果是p,则p+1就是第2个元素的地址。

3、数组的首地址如果是p,则p+1就跳过这个数组,而指向这个数组最后一个元素最后一个字节的下一字节。

举例说明,假设8bit-C51单片机环境下定义数组inttable[3],存储空间地址0x1000~0x1006中

留一个问题,table值是多少,table+1又是多少,有兴趣的可以上机自己看看(个人不是很建议编程中去使用)。

数组和指针之间有关系吗?

首先说结论,原则上来说,数组和指针之间没有任何关系,这里之所以要提这个话题,是因为现实编程中很多时候看上去数组和指针之间有非常多相近的地方。

首先说指针,在应用环境确定的时候,指针可以指向存储器中某一个地址,但是指针变量在应用环境确定的时候,指针变量所占的位数就是固定的。

数组就是数组,其大小与元素的类型和个数有关。定义数组时必须指定其元素的类型和个数。数组可以存任何类型的数据。

虽然两者在原理上毫无关系,但是使用中却经常转换,举个例子

要求采用指针读取数组里面的值可以如下操作

inttable_buf[];//定义一组buf,编程中一般会带初值

P=&table_buf;//将buf的首地址传递给指针

至此,table_buf里面的值,就完全可以采用指针读写的方式,一笔笔的传递给外部变量使用了。这在编程中开辟乒乓buf使用是很有帮助的。

网友点评

博博常识网

博博常识网

www.kissing2lips.com

日常生活里,经常会碰到一些五花八门的小困难。不过好久好在有困难就有方法,如果你足够的细心,你会发现这些小困难都有着对应的小方法。

Powered By Z-BlogPHP Theme By . 鲁ICP备2021032584号-5