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

原创 2016年08月29日 21:07:32

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

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++;
	}	
}

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







版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言指针与数组易混淆知识点(一)

一指针与数组 二指针与函数 三指针数组数组指针指向指针的指针 四程序陷阱 一、指针与数组指针:指针本身也是一个变量,它的内容是指向的内容的地址。指针同样有类型的区分,char 的指针只能指向char型...
  • woshimalingyi
  • woshimalingyi
  • 2016年03月25日 15:59
  • 3008

C语言:数组和指针的区别

实际上关于数组与指针的区别这个问题在《C专家编程》已经有很详细的阐释,但我想用自己的语言说一说我的理解。数组是指针?最近在做数据结构课设,其中一个函数发生了令人费解的错误,简化后的代码如下:#incl...
  • imred
  • imred
  • 2015年05月02日 19:08
  • 13937

深入理解C语言中的指针与数组之指针篇

前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在。相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分。 但是之前一方面之前一直在忙各种事情...
  • hinyunsin
  • hinyunsin
  • 2011年08月05日 13:52
  • 19753

指针数组&数组指针的分配内存及函数参数 C语言版

最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有...
  • WSRspirit
  • WSRspirit
  • 2016年04月29日 20:20
  • 3169

关于C语言中的数组指针、指针数组以及二级指针

概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以...
  • u014265347
  • u014265347
  • 2017年02月05日 19:14
  • 2983

C语言数组与指针作为传递参数的使用

学习笔记中的内容多少会有一点文不对题,因为C语言中数组无法作为函数的一个传递参数。而数组名在作为函数传递参数使用的时候实际上也被转换成了一个指针。 编写如下代码; #include"stdio.h...
  • grey_csdn
  • grey_csdn
  • 2017年02月27日 00:32
  • 1294

C语言定义数组指针的三种方法

C语言定义数组指针的三种方法C语言中有一种语法叫做数组指针,就是使用一个指针变量指向一个数组,然后对数组进行访问操作. 下面给出代码示例定义的方法, 代码如下:#includeint main(){...
  • ic_tv
  • ic_tv
  • 2015年07月14日 22:47
  • 6784

使用指针访问数组元素

C++语言中,指针和数组密切相关.特别是在表达式中使用数组名时,该名字会自动 转换为指向数组第一个元素的指针:int ia[]={0,2,4,6,8};int *ip=ia;  //ip points...
  • cool_mirror
  • cool_mirror
  • 2007年08月02日 16:16
  • 10211

数组的下标访问和指针访问方式效率分析比较

1、 int array[10], a; for (a = 0; a {     array[a] = 0; } 该组使用下标方式赋值,为了对下标表达式求值,编译器在程序中插入指令,取的...
  • qq_20583039
  • qq_20583039
  • 2015年07月22日 11:36
  • 1330

C语言——数组指针和通过指针引用数组元素的方法总结

1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢?int (* p)[10]; /*括号是必须写的,不然就是指针数组;10是数组的大小*/拓展:有指针类型元素的数组称为指针数组。 2...
  • jingzi123456789
  • jingzi123456789
  • 2016年05月11日 19:25
  • 4771
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中指针和数组的几种访问形式
举报原因:
原因补充:

(最多只允许输入30个字)