計算機概論:C/C++程式設計
|
第5章、陣列和指標 |
|
||||||||||||||||||
|
授課教師:陳慶瀚 WWW : http://www.miat.ee.isu.edu.tw/cpp E-mail : pierre@isu.edu.tw |
|
||||||||||||||||||
5.5 指標的應用 作為陣列名稱的指標 陣列是用來存放相同型別資料的一塊連續記憶體,也就是陣列中每一個資料的記憶體位址都是與前後資
料連續的。所以陣列名稱可當做指標來使用,例如宣告一個具有5個整數值的陣列: int array[5]={ 1,2,3,4,5 }; array是陣列名稱,但同時也是一個指標,指向陣列的第一個位址,也就是陣列的第一個元素array[0] ,其元素值為1。如果我們將array加1,表示記憶體位置加1,所以array+1便指向了元素array[1], 依此類推。表5.1呈現了這兩者的關係。 表5.1 作為指標的陣列名稱
範例程式5-9展示上述的觀念。
/*----------------------------------------------------*/ // 範例程式5-9 // 作為陣列名稱的指標 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include
<iostream.h> void
main() { int array[5]={ 1,2,3,4,5 }; int
i; for
( i=0 ; i<5 ; i++ ) { cout<<"array["<<i<<"]="<<array[i]<<"\t"; cout<<"array
+ "<<i<<"="<<array+i<<"\n"; } }
作為字串名稱的指標 字串(string)是字元(char)的陣列,由於陣列名稱可以視為指標,則字串名稱同樣也可以視為指標。宣告字串有兩種方式,一種是宣告一個字元的陣列,如 char
file_name[20]; file_name就是一個具有20個字元空間的陣列名稱,同時也是字串名稱,我們可以指定字串內容給它: file_name=”data.txt”; 宣告字串的另一種形式是把字串宣告成一個指標,同時把指標指向一個字串內容,如 char
*file_name=”data.txt”; 這兩種宣告的作用是一致的,但後者彈性較大,因為編譯器會視字串內容大小來配置相對的記憶體(在上例中,data.txt共8個字元,但編譯器會自動在字串的最後一個字元後面再加一個結束字元’\0’,所以一共9個字元空間)。而前者─宣告字元陣列的方式記憶體是固定為20個字元空間。 /*----------------------------------------------------*/ // 範例程式5-10 // 作為字串名稱的指標 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include < iostream.h > void main() { char str[6]="MIAT\n"; int i; for(i=0; i<4; i++ ) { cout<<"str["<<i<<"]="<<str[i]<<"\t"; } cout<<endl<<"str="<<str<<endl; } 這個程式宣告一個字元陣列str[6]作為字串變數,陣列大小為6,該陣列被初值化設定為"MIAT\n"。 我們使用for迴圈將每一個元素值─即個別字元輸出,程式的最後一行則是將字串值輸出, cout<<endl<<"str="<<str<<endl; 由於str 是陣列名稱,也是字串名稱,同時也是一個指標,在這個程式裡,這三者是一體的。 程式執行結果如下: str[0]=M str[1]=I str[2]=A str[3]=T str[4]= str[5]= str=MIAT
我們注意輸出結果的第5個(str[4])和第6個字元(str[5]),str[4]是控制換行字元'\n',因此輸出至螢幕就造成換行的效果,str[5]則是空白字元。 |
||||||||||||||||||||
計算機概論:C/C++程式設計 義守大學電機系 陳慶瀚 |