十、c语言之数组

十、c语言之数组前一篇文章已经介绍了指针,接着介绍一下数组。什么是数组?数组定义:int table[3];大家都明白这里定义了一个数组,其包含了3个int 型的数据。

欢迎大家来到IT世界,在知识的湖畔探索吧!

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

什么是数组?

数组定义:int table[3];

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

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

十、c语言之数组

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

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

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

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

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

& table [0]和& table 的区别

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

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

1、它们的地址值是相等的。

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

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

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

十、c语言之数组

&table = 0x1000;

&table+1 = 0x1006;

&table[0] = 0x1000;

&table[0] +1= 0x1002;

table[0]=0x1122;

table[1] = 0x3344;

table[2] = 0x5566;

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

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

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

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

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

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

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

int *p;

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

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/77493.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信