重点掌握:a[i] p[i] *(p+i) *(a+i)这几种元素的表示方式
一、数组与指针
1.概念复习
(1)在C语言中,数组的指针是指 :数组在内存中的起始地址,
数组元素的地址是指:数组元素在内存中的起始地址(因为指针的定义就是地址单元)
(2)一维数组的数组名为一维数组的指针(起始地址)
例如 double x[8]; 因此,x为x数组的起始地址
2.指针与一维数组的关系
(1)设指针变量px的地址值等于数组指针x(即指针变量px指向数组的首元素),
则: x[i] 、*(px+i)、*(x+i) 和px[i]具有完全相同的功能:访问数组第i+1个数组元素。
分析:x[i]这种形式是通过下标的方式对下标为i的元素进行引用,px指向数组的首地址,px+i是移动i个数据空间地址,然后用*(px+i)引用该地址上的数据,因为x数组名也是代表该数组的地址,因此相似于p,可得*(x+i),通过*(px+i)和*(x+i),又可推出px[i];
通过代码验证了这四种方式表示的数据是完全相同的;
所以
注意:指针变量和数组在访问数组中元素时,一定条件下其使用方法具有相同的形式,因为指针变量和数组名都是地址量 但指针变量和数组的指针(或叫数组名)在本质上不同,指针变量是地址变量,而数组的指针是地址常量;
(2)指针变量和数组指针的本质不同
常量是一个在程序运行期间不可更改的值。因此,地址常量也是不可更改的。地址常量是一个在程序中表示内存地址的固定值。这个值在程序运行期间是不可修改的。如果试图修改一个地址常量的值,程序将会产生错误。
数组名是地址常量
p++,p-- (对) 因为指针存储的是地址变量;
a++,a-- (错) a++是a=a+1的缩写形式,这个表达式表示将变量a
的值加1,并将结果赋给变量a,
这个过程中,变量a
的值发生了变化,如果程序中有类似操作,可能或警告甚至报错;
a--同理;
a+1, *(a+2) (对) 这个表达式表示返回加a+1后的结果。但是,这个过程中,变量a
的值并没有发生变化,仅仅是调用了一下a的值然后+1,得到这个操作后的值,相当于可以理解为把a地址作为一个基准或者跳板;
3.代码应用(程序举例)
(1)编写一个函数,将整形数组中n个数按反序存放:
(2)指针++细节注意
分析:
在p++后存储的地址已经是“7”的地址了,所以这时p存储的地址是a[1]的地址,这时p[1]即使(*(p+1))就等于a[2]了 ;
总结与思考
主要介绍了C语言中,指针如何访问一维数组 思考 当指针与数组结合在一起使用时,数组的元素有多少种表示方法?