1. 程式人生 > >指標與陣列的關係(一維、二維)

指標與陣列的關係(一維、二維)

一、指標和一維陣列間的關係

前提條件:

int a[10];//元素個數隨意自己定
int *p = a;//定義指標時直接初始化,也可以分為兩步:int *p; p=a;

第i個元素的地址:

&a[i]    等價於    a+i    等價於    &p[i]    等價於    p+i

第i+1個元素的值:

a[i]    等價於    *(a+i)    等價於    p[i]    等價於    *(p+i)

二、指標和二維陣列間的關係

前提條件:(對於二維陣列)

int a[2][3];//2行3列

行地址:
a表示二維陣列的首地址,第0行的地址
a+i代表第i行的地址,但並非增加i個位元組

列地址:
a[i] 或 *(a+i) 代表第i行第0列的地址
a[i]+j 或 *(a+i)+j 或 &a[i][j] 代表第i行第j列的地址

行指標指向的內容:
*(*(a+i)+j) 或 a[i][j] 代表第i行第j列的內容

 列指標指向的內容:
*(a+i*n+j) 或 a[i*n+j] 或 a[i][j] 代表第i行第j列的內容

二維陣列的行指標:(逐行查詢,逐列查詢)

#include <iostream>
using namespace std;

int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int (*p)[3];//(*p)[i]:是定義一個指向含有i個元素的陣列的指標,不過要注意,這裡“i”應該是一個常量
                //*p[i]:定義元素型別是指標的陣列,同樣的“i”應該是整型
    p=a;//用行地址初始化
    for(int i=0;i<2;++i)
    {
        for(int j=0;j<
3;++j) cout<<*(*(p+i)+j)<<" "; cout<<endl; } return 0; }

二維陣列的列指標:(逐個查詢,相對偏移量)

#include <iostream>
using namespace std;

int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int *p;
    p=*a;
    for(int i=0;i<2;++i)
    {
        for(int j=0;j<
3;++j) cout<<*(p+i*3+j)<<" "; cout<<endl; } cout<<endl;//另外一種表示方法 for(int i=0;i<2;++i) { for(int j=0;j<3;++j) cout<<p[i*3+j]<<" "; cout<<endl; } return 0; }