C语言中指针和数组的几种访问形式

一、关于这几种访问形式,理论不多说,从例子看:

1、数组名

#include<stdio.h>
int main()
{
	int i,a[]={0,1,2,3,4};
	for(i=0;i<5;i++)
	{
		printf("%d",a[i]); //通过数组名的数组下标形式访问
		//printf("%d",*(a+i));//通过数组名的指针形式访问	
	}
}

2、指针变量名

#include<stdio.h>
int main()
{
	int i,*pa,a[]={0,1,2,3,4};
	pa=a;					//注意数组名直接赋值给指针
	for(i=0;i<5;i++)
	{
		//printf("%d",pa[i]); //通过指针变量名的数组下标形式访问
		printf("%d",*(pa+i));//通过指针变量名的指针形式访问	
	}
}
从上面的两个例子(四个结论),我们知道结果都是01234。即通过数组名、指针对数组元素的访问是没有什么区别。从这里也可以看出数组名也是指针。难道他们没有任何区别吗?看下面的例子

3、数组名与指针变量名的区别

#include<stdio.h>
int main()
{
	int i,*pa,a[]={0,1,2,3,4};
	pa=a;					
	for(i=0;i<5;i++)
	{
		printf("%d",*pa); 
		pa++;		//注意这里,指针值被修改
	}
}

上面的结果和1、2的四种结果一样。但是如果把pa换成a,程序编译通不过。为什么呢?

因为pa指针是指针变量,而a是指针常量。对于pa++,pa指针的值是不断增加的,而数组名是指针常量,是不能被修改的。前面的几种情况下,pa始终是不变的,因此可以用数组名a代替指针变量pa。

注意一点:

在上面的例子中,数组的初始化必须是int a[]={0, 1, 2, 3, 4};而不能是int *a={0, 1, 2, 3, 4};后者编译都是警告,运行通不过。

但是换成字符串数组和字符指针却可以,具体原因我还要进一步学习,先看下面的例子

#include<stdio.h>
int main()
{
	int i;
	//char a[]="abcd";
	char *a="abcd";
	char *pa=a;
	for(i=0;i<=3;i++)
	{
		printf("%c",*pa);
		pa++;
	}	
}

原因等我搞明白了再回来补充。







  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值