【C】指针(三)指针指向数组

一个指针变量可以指向一个数组元素:注意用了两个“一个”,意味着,一个指针变量不能指向多个数组元素。举例:

【C】指针(三)指针指向数组

上面这个指针变量p指向了数组a 的第一个元素。

值得一提的是:数组的名称其实就是一个指针常量,它永远指向第一个元素的地址,即上面这个数组a,其实也是也指针变量,它指向了数组a的第一个元素,a=第一个元素的地址,而 *a=1。

指针指向一个数组元素后,可以进行这样的操作:

p+1或者p-1;           

p++;

p--;

值得一提的是:这里的+/- 1,并不意味着p的值也就是,p所存放的地址加或减1,确切的来说,是加上或减去一个数组元素所占用的字节数!32位系统中,一个元素占4个字节,假如原来p是2000,p+1则为2004,并不是2001!

而上面这个操作对于a来说是不可行的!因为一旦定义成数组之后,a就是一个常亮指针,永远指向数组的第一个元素,所以类似于a=a+1   a++这些操作都是不行的!


经过了上面的分析,我们知道:调用一个数组的元素有三种方法:

1. 下标法,即a[n]这种方式

2. 使用数组名访问,即*(a+i)

3. 使用指针,即p++

举个例子比较三种方式:

【C】指针(三)指针指向数组

这个程序就包含了三种打印数组a元素的方法,相比之下,第一、二种方法是效率较低的,因为要先计算每个元素的地址,再去访问,第三种方式效率较高。推荐使用。