c语言数组指针

c语言数组指针

//数组的名字一般情况下代表首元素的地址。当数组名与取地址符&结合时,得到的是整个数组的地址,与取地址符结合后再在前面加星号则又变为首元素的地址。数组的指针存放的内容就是整个元素的地址&a【举例一个整形5个元素的数组a的数组指针:int (p)[5]=&a】,则数组的首元素的地址为p。

#include<stdio.h>
int main()
{
	int i=0;
	int arr[5]={1,2,3,4,5};
	//printf("%p\n",arr);//代表数组首元素的地址
	//printf("%p\n",arr+1);//代表数组第二个元素的地址
	//printf("%p\n",&arr);//代表整个数组的地址
	//printf("%p\n",&arr+1);//代表下一个数组的地址
	//但为什么取地址arr和&arr打印的地址值是相同的呢,因为它们得到的都是首元素的地址
	//检测对整个地址间接引用后输出的内容
	//printf("%d\n",*arr);//y由于arr代表的是数组首元素的地址,对首元素的地址进行间接引用输出的是首元素的内容1
	//printf("%p\n",*&arr);
	printf("%d\n",*&arr+1);//通过+1进行验证,对&+arr为整个数组地址然后进行间接引用得到的是首元素的地址,为int型
	//for (i=0;i<5;i++)//通过地址进行 遍历数组
	//{
	//*printf("%d\n",*(*&arr+i));*///*&arr代表首元素的地址由于优先级的原因需要增加括号*&arr+i代表第i个元素的地址,然后间接引用达到遍历数组的目的,正常没有这么使用的,但通过这两个例子可以掌握 首元素地址和数组元素的地址的关系&arr代表数组的地址加*代表数组首元素的地址
	//printf("%d\n",*(arr+i));//arr代表首元素的地址由于优先级的原因需要增加括号arr+i代表第i个元素的地址,然后间接引用达到遍历数组的目的
	//}
	//arr++;提示错误为表达式是一个可修改的左值,说明arr数组名是一个常量不能改变(除了sizeof使用时),我们规定数组名字是一个常量,如不是常量,++后则无法找到声明的数组。
	//与单独变量名字有区别,正常可以使用单独变量的名字找到空间,
	//为数组定义一个指针
	//int( * arr1)[5]=&arr;//由于&arr是数组的地址,则需知道首元素的类型为int [5](去掉变量名),然后加*加变量名,考虑优先级的原因需要加(),否则arr1与结合【5】则为一个数组。arr1是这个数组的指针,存放整个数组的地址那么arr1是什么类型的?答:int(*)【5】,经过	printf("%d\n",sizeof(int( * )[5]));运算为指针类型4个字节
	//用arr1数组的指针区遍历arr数组的方法
	//for (i=0;i<5;i++)//通过地址进行 遍历数组
	//{
	//printf("%d\n",*(*arr1+i));//对整个数的地址机型
	//}
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值