標籤:[1] htm 中序 關於 stream 組成 資料 相同 結果
注意:數組指標的定義,與指標數組的區別
轉載: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語言數組指標(指向數組的指標)