数组小探

系统 1702 0

定义一个数组:

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

进行如下操作:

a, &a, &a[0]

1.问:各代表什么?

答:

a 等价于 &a[0] 等价于 第0个元素的地址

&a 等价于 数组a的地址

2.再问:请指出它们之间的实际区别。

答:请看代码:

显示结果是:

数组小探

&a 和 a 虽然数值一样,但系统在系统看来就是不同的东西了

系统会偷偷地给 &a 标记为:数组的地址
然后给 a 标记为:元素的地址

就像外人分不清双胞胎一样,熟人却可以分清楚哪个是哥哥,哪个是弟弟,因为他们已经在心里默默地给双胞胎标上了记号。

知识拓展:当执行下列操作的时候,会出现什么情况呢?

printf("%d/t%d/n", &a+1, (int*)&a+1);

数组小探

发现结果和 上一句的一样了!为什么呢?

因为 &a 原本在系统中是被标记为 “数组的地址”,而且经过(int*)强制转换后,变成了 “整型变量的地址”。数组的地址自加,会跨越整个数组,即 4*5 = 20 个字节,而整型变量的地址自加,只能跨越一个整型变量,即 1 个字节.

当然,我们也可以进行 逆向操作。即

(int (*)[5])a+1

数组小探

看!现在成功地把 a ---“元素的地址”, 转化成了 “数组的地址”,这时它再自加,就不是自加一个整型变量了,而是一整个数组!

注意:(int *[5])a 和 (int (*)[5])a 是不同的!

数组小探


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论