指標數組(一)

來源:互聯網
上載者:User

前面介紹了指向不同類型變數的指標的定義和使用,我們可以讓指標指向某類變數,並替代該變數在程式中使用;我們也可以讓指標指向一維、二維數組或字元數組,來替代這些數組在程式中使用,給我們在編程時帶來許多方便。

下面我們定義一種特殊的數組,這類數組存放的全部是指標,分別用於指向某類的變數,以替代這些變數在程式中的使用,增加靈活性。指標數組定義形式:

類型標識 *數組名[數組長度]

例如: char *str[4];

由於[ ] 比*優先權高,所以首先是數組形式str[4 ],然後才是與“*”的結合。這樣一來指標數組包含4個指標s t r [ 0 ]、s t r [ 1 ]、s t r [ 2 ]、s t r [ 3 ],各自指向字元類型的變數。例如:

int *p t r [ 5 ] ;

該指標數組包含5個指標p t r [ 0 ]、p t r [ 1 ]、p t r [ 2 ]、p t r [ 3 ]、p t r [ 4 ],各自指向整數型別的變數。

[例6-22] 針對指標數組的應用,我們分別用指標數組的各指標指向字串數組、指向一維整型數組、指向二維整型數組。

#include <stdlib.h>
#include <stdio.h>
m a i n ( )
{
char *ptr1[4]={"china","chengdu","sichuang","chongqin"};
/* 指標數組p t r 1 的4個指標分別依此指向4個字串* /
int i,*ptr2[3],a[3]={1,2,3},b[3][2]={1,2,3,4,5,6};
for(i=0;i<4;i++)
printf("\n%s",ptr1[i]);/依*此輸出ptr1數組4個指標指向的4個字串*/
printf("\n");
for(i=0;i<3;i++)
ptr2[i]=&a[i];/*將整型一維數組a的3個元素的地址傳遞給指標數組ptr2*/
for(i=0;i<3;i++)/*依此輸出ptr2所指向的3個整型變數的值*/
printf("%4d",*ptr2[i]);
printf("\n");
for(i=0;i<3;i++)
ptr2[i]=b[i];/*傳遞二維數組b的每行首地址給指標數組的4個指標*/
for(i=0;i<3;i++)/*按行輸出*/
printf("%4d%4d\n",*ptr2[i],*ptr2[i]+1);
}

程式中指標數組與所指對象的關係如圖6-12所示。

ptr1指標數組中的4個指標分別指向4個字串,如圖6-11的a)所示,程式中依此輸出;ptr2指標數組共有3個指標,若將整型一維數組a中各元素地址分別傳遞給指標數組的各指標,則ptr2[0]就指向a[0];ptr2[1]就指向a[1];ptr2[2]就指向a[2]。若將二維數組各行的首地址分別傳遞給指標數組的各指標,如圖6-11b)所示,這樣一來,ptr2[0]就指向了b數組的第0行,該行有兩個元素,其地址為ptr2[0]與ptr2[0]+1;相應指標數組第i個元素ptr2[i]指向的b數組的第i行兩個元素地址分別為ptr2[i]與ptr[i]+1。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。