C語言數組指針(指向數組的指針)
阿新 • • 發佈:2017-12-05
alt put for 說明 單位 output div col 函數
圖6.17
圖6.18
註意:數組指針的定義,與指針數組的區別
轉載:http://c.biancheng.net/cpp/biancheng/view/162.html
指向多維數組元素的指針變量
① 指向數組元素的指針變量
【例6.7】輸出二維數組各元素的值。這裏采用的方法是用基類型為整型的指針變量先後指向各元素,逐個輸出它們的值。
#include <iostream> using namespace std; int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; //p是基類型為整型的指針變量 for(p=a[0];p<a[0]+12;p++) cout<<*p<<" "; cout<<endl; return 0; }
運行結果如下:
1 3 5 7 9 11 13 15 17 19 21 23
關於指向數組元素的指針變量的幾點說明:
- p是指向整型數據的指針變量,在for語句中對p賦初值a[0],也可以寫成“p=&a[0][0]”。
- 循環結束的條件是“p<a[0]+12”,只要滿足p<a[0]+12,就繼續執行循環體。
- 執行“cout<<*p;”輸出p當前所指的列元素的值,然後執行p++,使p指向下一個列元素。
②指向由m個元素組成的一維數組的指針變量
可以定義一個指針變量,它不是指向一個整型元素,而是指向一個包含m個元素的一維數組。這時,如果指針變量p先指向a[0](即p=&a[0]),則p+1不是指向a[0][1],而是指向a[1],p的增值以一維數組的長度為單位,見圖6.17。
圖6.17
【例6.8】輸出二維數組任一行任一列元素的值。
#include <iostream> using namespace std; int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; cin>>i>>j; p=a; cout<<*(*(p+i)+j)<<endl; return 0; }
運行情況如下:
2 3↙
23
由於執行了“p=a”,使p指向a[0]。因此p+2是二維數組a中序號為2的行的起始地址(由於p是指向一維數組的指針變量,因此p加1,就指向下一個一維數組),見圖6.18。*(p+2)+3是a數組2行3列元素地址。*(*(p+2)+3)是a[2][3]的值。
圖6.18
3) 用指向數組的指針作函數參數
一維數組名可以作為函數參數傳遞,多維數組名也可作函數參數傳遞。
【例6.9】輸出二維數組各元素的值。題目與例6.7相同,但本題用一個函數實現輸出,用多維數組名作函數參數。
#include <iostream> using namespace std; int main( ) { void output(int (*p)[4]); //函數聲明 int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; output(a); //多維數組名作函數參數 return 0; } void output(int (*p)[4]) //形參是指向一維數組的指針變量 { int i,j; for(i=0;i<3;i++) for(j=0;j<4;j++) cout<<*(*(p+i)+j)<<" "; cout<<endl; }
運行情況如下:
1 3 5 7 9 11 13 15 17 19 21 23
C語言數組指針(指向數組的指針)