陣列指標 指標陣列 二維陣列如何理解與使用

2021-09-26 08:25:13 字數 2603 閱讀 3781

首先它是乙個指標,它指向乙個陣列,在32位系統下任何型別的指標所佔記憶體大小都為4個位元組,至於它指向的陣列佔多少位元組,具體要看陣列的大小。總之,陣列指標即為「指向陣列的大小」,例如:int (*p)[4],定義了乙個陣列指標,該指標變數儲存的是乙個陣列的首位址,它可以指向乙個含有4個整型元素的陣列。

(1)對於一維陣列:

int main(void)

; char (*p)[5]=&a;//&a代表的是整個陣列的首位址

//char (*p)[5]=a;這樣是錯誤的,因為a代表第乙個元素的首位址

printf("%c %c %c",**p,*(*p+1),*(*p+3));//輸出:a k g

return 0;

}

說明:a代表的是第乙個元素的位址,即:&a[0],而&a代表的是整個陣列的位址。雖然printf("%p %p",&a,a);輸出的值是相同的,但它們代表的意義不同。a+1代表的是下乙個元素的位址,即&a[1],而&a+1代表的是向後移動5個位元組的位址。這裡為什麼用的二級指標呢?因為p=&a,*p即為第乙個元素的位址,再**p即輸出了第乙個元素。同理,*(*p+1),*(*p+3)輸出第二個元素,第四個元素。

(2)對於二維陣列:

int main(void)

; char (*p)[4]=null;

p=&a[0];

printf("%c %c %s %s\n",*(*p+1),*(*(p+1)+1),*p,*(p+1));//輸出:o r for cr

return 0;

}

說明:二維陣列的傳遞有兩種方式:一種是行指標傳遞,例如上面的**(p=&a[0],p指向了第一行的位址);一種是列指標傳遞(看下面的介紹)。上面**中p代表二維陣列第一行的位址,則*p代表第一行的第乙個元素的位址,*p+1代表第一行的第二個元素的位址,再*(*p+1)則輸出了第二個元素;同理,p+1代表第二行的位址,*(p+1)代表第二行第乙個元素的位址,*(p+1)+1代表第二行第二個元素的位址

首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身的大小決定,每個元素都是乙個指標。總之,它是乙個"儲存指標的陣列"。例如:char *msg=。儲存了兩個指標,第乙個指標指向了字串"sunday",第二個指標指向了字串"monday",sizeof(msg)=8。指標陣列最主要的用途是對多個字串進行處理操作,因為字元指標比二維陣列更快更有效。

(1):

void print(char *arr)

int main(void)

; print(p);

return 0;

}

(2):

void print(char **arr)

int main(void)

; print(p);

return 0;

}

(3):

//如果乙個指標陣列大小不確定,則可以在指標陣列的末尾設定null

char *a=;

void print(char *p)

}

例如:int a[3][4],即定義了乙個三行四列的整型二維陣列。在初始化時候,第乙個中括號的數字可以省略但第二個不可以省略。這些基本知識可以看看大學課本,不再闡述。

int a[3][4];
a:代表a[0]的位址,即:a=&a[0],a[0]代表a[0][0]的位址,即a[0]=&a[0][0];

a+1:代表a[1]的位址,即:a+1=&a[1],a[1]代表a[1][0]的位址,即a[1]=&a[1][0];

a+2:代表a[2]的位址,即:a+2=&a[2],a[2]代表a[2][0]的位址,即a[2]=&a[2][0];

a[i][j]=*(a[i]+j)=*(*(a+i)+j)=(*(a+i))[j]

(1):二維陣列用行指標定義

int (*p)[4]=null;
定義了乙個陣列指標,可指向含有4個整型元素的指標變數。指向二維陣列的行指標,它所指向的二維陣列的每一行有4個元素。

初始化:

p=a;

//或p=&a[0];

p[i][j]或者*(p[i]+j)或者*(*(p+i)+j)

(2):二維陣列用列指標定義

int *p=null;
將這個二維陣列看成乙個一維陣列,具有m*n個元素。

初始化:

p=a[0];

//或p=*a;

//或p=&a[0][0];

*(p+i*n+j)或者p[i*n+j]

char *p1=;

char p2[8]=;

*p1,*(p1+1),*(p1+2):所指向的字串常量是不規則長度的,且sizeof(p1)=12。

p2[0],p2[1],p2[2]所指向的字串都是一定長度的,且sizeof(p2)=24。

指標陣列 陣列指標 二維陣列指標

指標陣列 如果乙個陣列中的所有元素儲存的都是指標,那麼我們就稱它為指標陣列。除了每個元素的資料型別不同,指標陣列和普通陣列在其他方面都是一樣的,下面是 乙個簡單的例子 include int main 也可以不指定長度,直接寫作 int parr 定義乙個指向指標陣列的指標 int parr arr...

二維陣列 指標陣列與陣列指標

一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...

二維陣列相關(陣列指標 指標陣列)

一維陣列中,int a 5 變數名a就是陣列a首元素位址,是int 型別。a是整個陣列首位址,是指向有5個元素的陣列的指標。二維陣列中,變數名a就是0行起始位址,a 就有轉換到列的意思,就代表0行0列。陣列指標 是乙個指標,其指向的資料型別由乙個陣列構成 將陣列作為乙個陣列型別對待 如 int p ...