从品牌网站建设到网络营销策划,从策略到执行的一站式服务
本篇内容介绍了“C语言数组中的a与&a有什么不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联建站专业为企业提供陕西网站建设、陕西做网站、陕西网站设计、陕西网站制作等企业网站建设、网页设计与制作、陕西企业网站模板建站服务,10年陕西做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
首先,看一段代码:
#include
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)个字节,其描述图如下:
看了这张图,想必大家已经对a与&a有了一个清晰的认识了吧。下面分析一段代码:
#include
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。
“C语言数组中的a与&a有什么不同”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图