前面我們已經知道,通過數組下標可以確定數組元素在數組中的順序和存儲地址。由于每個數組元素相當于一個變量,因此指針變量可以指向數組中的元素,也就是說可以用指針方式訪問數組中的元素。
對一個指向數組元素的指針變量的定義和賦值方法,與指針變量相同,例如:
int a[10]; /*定義a為包含10個整型數據的數組*/ int *p; /*定義p為指向整型變量的指針*/ p=&a[0]; /*把a[0]元素的地址賦給指針變量p*/
C語言規(guī)定,數組名代表數組的首地址,也就是第0號元素的地址。因此:
p=a; /*等價于p=&a[0];*/ int *p=a; /*等價于int *p=&a[0];*/
對于指向首地址的指針p,p+i(或a+i)就是數組元素a[i]的地址,*(p+i)( 或*(a+i) )就是a[i]的值。
如果指針變量p已指向數組中的某一個元素,則p+1指向同一數組中的下一個元素。
引入指針變量后,就可以用以下兩種方法來訪問數組元素:
(1)下標法,即用a[i]形式訪問數組元素,在前面介紹數組時都是采用這種方法。
(2)指針法,即采用*(a+i)或*(p+i)形式,用間接訪問的方法來訪問數組元素,其中a是數組名,p是指向數組的指針變量,其初值p=a。
#include<stdio.h> int main() { int i; int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a; for(i=0;i<10;i++) { printf("P Value:%d a Value :%d\n",*(p++),*(a+i)); } printf("\n"); return 0; }
注意輸出的兩種方式,指針可以通過++或--并修改自身值的方式移動,然而數組名本身值不可以被更改。
請您親自上機運行,并分析。
C語言網提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程