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++语言中,指针和数组密切相关.特别是在表达式中使用数组名时,该名字会自动 转换为指向数组第一个元素的指针:int ia[]={0,2,4,6,8};int *ip=ia;  //ip points...

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

1、 int array[10], a; for (a = 0; a {     array[a] = 0; } 该组使用下标方式赋值,为了对下标表达式求值,编译器在程序中插入指令,取的...

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

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

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

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

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

一指针与数组 二指针与函数 三指针数组数组指针指向指针的指针 四程序陷阱 一、指针与数组指针:指针本身也是一个变量,它的内容是指向的内容的地址。指针同样有类型的区分,char 的指针只能指向char型...

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

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

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

1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢?int (* p)[10]; /*括号是必须写的,不然就是指针数组;10是数组的大小*/拓展:有指针类型元素的数组称为指针数组。 2...

C,C++ 指针数组与数组指针

//注意指针数组和数组指针分别是如何指向二维数组的#include main(){    static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/* 定义二维数...

C中数组与指针

     在这里随便定义一个数组     int arr[5];     arr现在就是数组名, arr 代表的是该数组整块内存,即sizeof(arr) == 20 (假设sizeof(int) =...

深度长文教你彻底掌握C++/C指针

一.基础C++或者C里面最容易让人糊涂应该是指针了,不管是初学者甚至是有经验的童鞋有时候在用指针的时候也会出现一些很隐蔽的错误. 指针本身就是一个很绕的概念,而指针又能够和很多的结构比如数组(二维数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中指针和数组的几种访问形式
举报原因:
原因补充:

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