c语言——数组名和&+数组名的区别

   在学习c语言的过程中我们可以发现一个一维数组的的数组名往往具有两层含义:

  一. 作为数组名代表整个数组

  二. 作为指针代表数组的首元素地址(因此很容易把数组和指针混为一谈)。

当数组名作为首元素的地址时:

int main()
{
	int arr[5];
	int*p = arr;
	printf("arr=%d\n",arr);
	printf("arr+1=%d\n",arr+1);
	printf("arr+2=%d\n",arr+2);
	printf("p=%d\n",p);
	printf("p+1=%d\n",p+1);
	printf("p+2=%d\n",p+2);
	system("pause");
}

  我们可以发现数组名等价于一个指向数组首地址的指针。


当数组名代表整个数组的时候是在以下两种情况:1.在用sizeof关键字求数组所占的内存大小。2.对数组名取地址时代表整个数组的首地址。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int arr[5];
	int*p = arr;
	printf("arr=%d\n",arr);
	printf("arr+1=%d\n",arr+1);
	printf("&arr=%d\n",&arr);
	printf("&arr+1%d\n",&arr+1);
	printf("sizeof(arr)=%d\n",sizeof(arr));
	printf("sizeof(&arr)=%d\n",sizeof(&arr));

	system("pause");
}


   由此可见:当用sizeof求数组的内存长度时,数组名所代表的是整个数组,所以长度=5*4=20;

                       在用sizeof求&arr的内存长度时,他所求的空间长度是指向整个数组的地址的占用空间长度;

                       当对数组名取地址时&arr+1所占的地址与&arr所占的地址相差20;而arr+1所占的地址与arr所占的地址相差4;


具体原理及内容可参见数组名与指针的关系指针数组与数组指针








  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值