数组名a和&a的区别

来源:互联网 发布:dijkstra算法解题步骤 编辑:程序博客网 时间:2024/05/07 10:11

  这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值,例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。

    这里我们以整形数组为讲解:int  a[4];

   a是一个地址,我们知道a其实本来的面目应该是:a+0,只不过这个0我们就省了,*(a+0)是什么呢,这个代表的就是取得第一个元素的内容,也就是a[0],所以我们可以知道a它代表的应该是第一个(下标为0)元素的地址。

   这里我们先从另外一个方面来理解什么是数组,其实我们可以把数组假设为一个基本类型变量,它的类型为 int [4].也就是变量a这个对象代表的就是4个int那么大小的一个区间,而且不可分割。它和一般变量不同的地方在于,它的操作受限,不能像一般变量那样,直接通过赋值符号一次性将整个区间的值赋值给另外一个相同的数组变量。而只能通过下标来一个个元素的赋值。

   通过上面的分析,&a就好理解了,他就是变量a的地址,这个变量a的作用范围是四个int空间的数据,也就是如果将&a赋给某个变量p,p的类型应该是:int (*)[4];也就是指向包含4个int数据的数组的指针。

   再来看看a+1和&a+1的区别,a+1表示的是数组第一个元素地址,&a+1表示的是跨过a数组的下一个地址。通过图来表示可能更加清晰可理解:

&a与a的差别

   其实&a和a的值倒是完全一样的,都是下标为0的元素的地址,关键在于它们的作用域不同,在网上看到一个比喻觉得挺恰当的,长沙在长沙市来说是中心,同时在湖南省来说,也是湖南省的政治中心,长沙即作为市的中心,也作为省的中心,但是在不同的范围内,表达的意思是不一样的。

原创粉丝点击