前面介绍过,如果数组名出现在表达式中,会退化成指向第一个元素的地址。比如:

int a[10],a等价于&a[0]。由此可以说明:数组名不仅仅是一个标识符名字,还是一个地址常量。

下面我们定义:如果一个变量存放了数组的起始地址,该变量就称为指向该数组的指针。

例:int a[10],*p=a;这里p就是数组a的指针。(*p=a等价于*p=&a[0])


插入一个概念:指针不是数组,只是数组名出现在表达式中会退化成指向第一个元素的首地址(这个情况有两种特例:1.对数组名使用sizeof  2.对数组名使用&).

其次,对于数组a,p是数组a的指针,a++不行,p++可以。


有了上面的铺垫后,那我们访问数组元素就有两种方法(假设a是数组):

1.a[0],a[1]...

2.*a,*(a+1)...

下面就是指针的一个重要知识点了:

指针和一维数组(含题目练习)_数组名

下面用1个例题来说明一下:

指针和一维数组(含题目练习)_十进制数_02

如果能把这个结果明确明白的话,那这个运算符就过关了。(需要注意的是,p=&a[1],*(++p)和++(*p)结果虽然一样,但是前者是指向下一个元素a[2],后者是a[1]+1=3了)


1.题目:将一个十进制数转化成八进制整数

指针和一维数组(含题目练习)_十进制数_03

2.题目:用选择法对10个整数进行排序

指针和一维数组(含题目练习)_十进制数_04

3.题目:将数组中的元素反序后输出

指针和一维数组(含题目练习)_数组名_05

也可以这样:

指针和一维数组(含题目练习)_标识符_06


如有不对,欢迎指正。​