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...