C语言中a和&a

C语言中a和&a

一.a
这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值。例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。好了,下面我来谈谈类型的理解。
1.C语言中的类型
char a ; =====> a是char类型
short b; =====> b 是short类型
int c; =====> c是int类型
char *p; =====> p是char *类型
Short *p; =====>p是short *类型
Int *c ======> c是 int *类型
因此,我们可以得出一个结论:把变量名去掉,剩下的就是类型。
因此,我们的数组就可以说是一个特殊的类型。以int类型的数组为例,来说说我们
的a和&a.

例如:int a[4];

众所周知,a是一个地址。其实,a的本来的面目应该是a + 0,只不过,这个0我们常常
省略了,*(a + 0)表示什么?,这个就是代表我们取得第一个元素的数据,也就是a[0].
因此,我们可以理解为a代表了首元素的地址。也就是a[0]的地址。因此,我们得出了一个
结论:数组的数组名,代表了数组首元素的首地址。
int a[4]数组中,a[0]的数据类型为int 类型,它的地址就应该用int *来保存。
故a的类型应该用int *类型来保存。

2.&a地址详解
理解了a,我们再来理解&a的话,相对来说就比较容易了。刚刚说了,我们变量名去掉,剩下的就是我们的类型。还是以int 类型的数组为例子来讲解。

例如:
char a; ====>&a表示的是我们的地址。&a +1一次移动一个char类型的
大小
short a; ====>&a表示的是我们的地址。&a +1一次移动一个short类型
的大小
int a; ===>&a表示的是我们的地址。&a +1一次移动一个int类型的
大小

同理:int a[4] ===>数组的类型为int [4];&a表示的就是我们int [4]的,整个变量的地址。把
Int [4]看成一个整体,&a + 1一次移动懂得大小为整个数组的大小,也就是20个字
节。&a可以理解成数组真正的地址。

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

再来看看a+1和&a+1的区别,a+1表示的是数组第一个元素地址,&a+1表示的是跨过a数组的下一个地址。如下图
在这里插入图片描述

  • 14
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值