前面介绍过,如果数组名出现在表达式中,会退化成指向第一个元素的地址。比如:
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个例题来说明一下:
如果能把这个结果明确明白的话,那这个运算符就过关了。(需要注意的是,p=&a[1],*(++p)和++(*p)结果虽然一样,但是前者是指向下一个元素a[2],后者是a[1]+1=3了)
1.题目:将一个十进制数转化成八进制整数
2.题目:用选择法对10个整数进行排序
3.题目:将数组中的元素反序后输出
也可以这样:
如有不对,欢迎指正。