指標與陣列(C 學習筆記 11)

2021-08-30 15:53:24 字數 3767 閱讀 2809

1、定義指向陣列元素的指標

每個陣列元素相當於乙個變數,所以定義指向陣列元素的指標與定義指向變數的指標方法相同。例如:

int ia[5]

;/*定義包含5個陣列元素的整型陣列ia*/

int*pi;

/*定義指向整型變數的指標變數pi*/

pi=&ia[0]

;/*使指標變數pi指向陣列的第0個元素*/

pi=

&ia[0]

;pi=ia;

2、通過指標變數使用陣列元素

(1)*pi 相當於ia[0],即指標所指向的陣列元素ia[0]

(2)*(pi + ii)相當於ia[ii],即陣列元素ia[ii]

(3)pi[ii] 相當於 ia[ii],與*(pi + ii )等價

(4)pi + ii 相當於 &ia[ ii ],即陣列元素ia[ ii ]的位址

首先說明一下,c++表示字串的資料型別就是string,在c語言中才是用char型的陣列儲存字串(在c中沒有string來定義乙個變數為字串型別)。

指向陣列的指標最常見的應用是將指標指向字串。

在c中,通過兩種方法使用乙個字串,一是使用字元陣列,二是使用字元指標。

例1:使用字元陣列。

#include

void

main()

cstring2[i]

='\0'

;printf

("cstring1的值為:%s\n"

,cstring1)

;//用「%s」輸出乙個字元陣列時,遇結束符'\0'就停止輸出,因此要求字元陣列必須以'\0'結束

printf

("cstring2的值為:%s\n"

,cstring2)

;}

例2:使用字元指標。

#include

void

main()

*toc =

'\0'

;printf

("cstring1的值為:%s\n"

,cstring1)

;printf

("cstring2的值為:%s\n"

,cstring2)

;}

在使用字元指標變數時,應該注意:

(1)在定義字元指標變數時,可以直接用字串常量作為初始值對其初始化。

char

*text =

"hello world!"

;

char

*text;

text =

"hello world!"

;

注意:當使用字串常量時,c語言會自動產生乙個指向那個字串的指標,因此可以通過賦值語句使乙個字元指標指向乙個字串常量。

(2)對於字元陣列,不能用字串常量直接賦值,如下面的語句是錯誤的:

char cstring[50]

;cstring =

"hello world!"

;//錯誤的

這是因為字元陣列的首位址是不能改變的。只可以在初始化時對乙個字元陣列使用這種形式的賦值語句。 (c 語言 p172)

(3)可以利用字元指針對字串進行整體輸出。

char

*text =

"hello world";

printf

("%s"

,text)

;

在輸出時,系統從指標變數text 所指向的字元資料開始,依次輸出後面的字元,直到遇到字串結束標誌』 \0 '為止,由於字元陣列的名字也是乙個位址,所以同樣可以利用字元陣列名對字串進行整體輸入輸出。但是對乙個數值型陣列,則不能用陣列名輸出它的全部元素。

int ii[3]

=;printf

("%d\n"

,ii)

;//錯誤的

1、什麼是指標陣列?

用指向同一資料型別的指標來構成乙個陣列,這就是指標陣列。

陣列中每個元素都是指標變數。定義指標陣列的一般形式為:

型別名 *陣列名[ 元素個數 ];

例如:

int

*pi[10]

;//定義了乙個指標陣列,pi為指標陣列名(pi是常量,代表陣列的首位址)

//共有10個陣列元素,每個元素都是指向整型量的指標

2、為什麼要定義和使用指標陣列?

在指標陣列中只儲存字串的首位址,字串按照實際長度儲存,所以不存在空間浪費的情況。(在c中,字串是作為字元陣列進行儲存的,而且使用『\0』作為字串結束的標誌)

例3: 將若干字串按字母順序(由小到大)排序。

方法一:使用指標陣列。程式如下:

#include

#include

#include

void

main()

;char

*ctemp;

int in=5;

int i,j,k;

ctemp=

(char*)

malloc

(sizeof

(char)*

30);for

(i=0

;i1;i++)if

(k!=i)}}

for(i=

0;i)}

我在寫這個**時本來打算使用strcpy函式的,但是出現了錯誤。所以最好要使用陣列就都使用陣列,要使用指標就都使用指標(指的是中間變數是陣列還是指標)。strcpy函式在c語言書p114。

方法二,使用陣列。程式如下:

#include

#include

#include

void

main()

;char ctemp[20]

;int in=7;

int i,j,k,h;

for(i=

0;i1;i++)if

(k!=i)}}

for(i=

0;i)}

1、可以將二維陣列看做是一維陣列使用指標進行處理。

陣列指標

定義乙個陣列指標:型別名(* 指標變數名)[元素個數];

例如:int(* pi)[4];

它表明指標變數 pi 指向的儲存空間包含4個整型元素,即陣列指標 pi 指向乙個一維陣列, pi 的值就是該陣列的首位址。

例4:使用指標輸出二維陣列的全部元素。

#include

void

main()

,,};

int(

* pi)[4

],i,j;

for(i=

0;i<

3;i++)}

printf

("\n");

}

在使用陣列指標時,應注意:

pi是乙個行指標,它只能指向乙個包含若干元素的一維陣列,不能指向一維陣列中的元素。如果要訪問一維陣列中的某個元素,如第j個元素,可採用 (pi)[j] 的形式。

C語言學習筆記 指標 指標陣列與陣列指標

指標陣列 是乙個陣列,陣列元素為指標 陣列指標 是乙個指標,指向陣列的指標 例如 int p1 5 int p2 5 對於語句int p1 5 因為 的優先順序要比 要高,所以 p1 先與 結合,構成乙個陣列的定義,陣列名為 p1,而 int 修飾的是陣列的內容,即陣列的每個元素。也就是說,該陣列包...

C 學習筆記4 陣列與指標

陣列和指標 1.int pi 0 pi不指向任何物件。指標最好應初始化,如果須分開定義指標和其所指向的物件,則將指標初始化為0.2.把int型變數賦給指標是非法的,儘管此int型變數的值可能為0.但允許把數值0或在編譯中可獲得0值的const量賦給指標。3.如果把指向const的指標理解為 自以為指...

C 學習筆記11 動態陣列與多維陣列

1,new與delete 儲存動態建立的物件的記憶體區域稱為自由儲存區 free store 與堆 heap new表示式 int pia new int 10 未初始化 string psa new string 7 呼叫預設建構函式初始化 int pia new int 10 初始化為0 del...