1. 程式人生 > >C語言數組指針(指向數組的指針)

C語言數組指針(指向數組的指針)

alt put for 說明 單位 output div col 函數

註意:數組指針的定義,與指針數組的區別

轉載: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語言數組指針(指向數組的指針)