【C语言笔记】数组a与&a有什么不同?

首先,看一段代码:

#include <stdio.h>

int main(void)
{
 int a[5] = {0,1,2,3,4};

 printf("a = %d , &a = %d \n", a, &a);

 return 0;
}

该代码运行结果为:

可见,对于一个数组:

int a[5] = {0,1,2,3,4};

a与&a的值是相同的。为什么呢?

a是数组名,是一个数据区的常量,对其取地址(&a)就可以得到数组存储区域的地址,同样,a本身也代表了数组存储区的首地址。所以,a与&a的值是一样的。但是,虽然a与&a指向同一个地址,但是他们的含义是不同的。下面我们修改一下上面的代码看看”a+1”与”&a+1”是否还相等?修改后的代码运行结果为:

可见,a+1的值比a的值大4,即sizeof(a[0]);&a+1比&a的值大20,即sizeof(a)。由此,可得出结论:a+1指向的地址相对与a指向的地址向后偏移了sizeof(a[0])个字节,&a+1指向的地址相对与&a指向的地址向后偏移了sizeof(a)个字节,其描述图如下:

下面分析一段代码:

#include <stdio.h>

int main(void)
{
 int a[5] = {0,1,2,3,4};
 int *ptr = (int*)(&a+1);

 printf("*(a+1) = %d, *(ptr-1) = %d\n",*(a+1), *(ptr-1));

 return 0;
}

运行结果为:

*(a+1) = 1, *(ptr-1) = 4

*(a+1) = 1,是因为a+1代表数组第二个元素的地址,即&a[1]*(a+1)为取该地址上的值,即为1;*(ptr-1)=4,是因为ptr指向的是整个数组内存区域之后的内存,即数组最后一个元素之后的地址,ptr-1就是指向数组的最后一个元素,*(ptr-1)为取该地址上的值,即为4。

以上就是今天分享的关于数组的一个小知识点,如有错误欢迎指出!


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏毛毛v5

利用vscode当golang编写IDE的配置过程

vscode以良好的兼容性进来收到追捧。整个vscode执行效率比基于java的ide效率又高。一直用liteide来编写golang,但是liteide调试时...

30820
来自专栏毛毛v5

golang链接mssql数据库挖坑,填坑

       先是用了github.com上面星星最多的一个库 "github.com/denisenkom/go-mssqldb",可是死活连不上我的mssq...

19250
来自专栏全栈技术Kojo

Spring的JavaConfig

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

13750
来自专栏Golang开发

JS对象

JavaScript中: js中的对象就是生活中对象的一个抽象, 没有特征和行为,取而代之的是有对应的属性和方法;

31670
来自专栏全栈技术Kojo

Netty-server

    当然网上对Netty 这框架有许多人都介绍,对于在网络编程的地位以及优劣性也有很多,打架可以去看看,今天我主要的目的是将自己项目中的实例拿出来和打架风向

18730
来自专栏毛毛v5

golang type struct 只写成员类型的 匿名字段。

这真是蛋疼了。*sql.DB是什么鬼啊?为什么只有类型没有字段名啊?看来没有系统看过golang语法真是够呛。发个QQ在群里面问golang达人,趁着别人还没回...

10020
来自专栏Fundebug

Clean Code之JavaScript代码示例

作为一个开发者,如果你关心代码质量,除了需要认真测试代码能否正确执行以外,还要注重代码的整洁(clean code)。一个专业的开发者会从将来自己或则他人方便维...

14370
来自专栏Albert陈凯

2019-06-04 在构建单一 Jar 包时,Maven maven-assembly-plugin 和 maven-shade-plugin 插件的不同之处maven-shade-plugin

Maven Assembly Plugin 和 Shade Plugin 都可以用来在构建单一 Jar 包时,将所有 Dependency 打入这个最终生成的 ...

19720
来自专栏贺利权

Android Study 玩转百度ocr身份证识别不是梦~

LZ-Says:最近好哥儿们因公来廊坊,在家里可谓夜夜笙歌,喝酒喝的俩眼发懵,最近状态欠佳,导致学习计划一直在滞留,今天通过简短的小例子,重新拾起学习之路,滚蛋...

24510
来自专栏腾讯云数据库(TencentDB)

MySQL数据库优化方案测试-亿级银行交易数据的查询

点击上方蓝字关注我们吧 作者:逸宸a 链接:https://www.jianshu.com/p/cbdef47fb837 对MySQL的性能和亿级数据的处...

16340

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励