字符串也是一維數組,但它很特殊,所以這裡說的一維數組不包含它,而是指數字數組,即整數數組和實數數組,也就是數值數組。如果抄襲字符串的形式來輸出數組的全部內容,有可能會寫出如下的錯誤程序。
#include <stdio.h> void main ( ) { int a[3]={1 ,2 ,3} ; printf ("%d\n" ,a ); }
這個程序本身是正確的,問題是它輸出的內容不符合要求。字符串可以使用printf函數一次輸出,但數值數組只能一次一個地輸出。上述程序中使用的printf語句格式輸出的不是數組的內容,而是數組存儲的首地址。a的內容必須一個一個地輸出,即
printf ("%d " ,a[0] ); printf ("%d " ,a[1] ); printf ("%d " ,a[2] );
可以使用如下循環語句的形式輸出:
for (i=0 ;i<3 ;i++ ) printf ("%d " ,a[i] );
【例2.11】下面程序輸出的是數組的內容嗎?
#include <stdio.h> void main ( ) { int a[3]={1 ,2 ,3} ; int i=0 ; for (i=0 ;i<3 ;i++ ) printf ("%d " ,&a[i] ); printf ("%d\n" ,a ); }
這個程序不是輸出數組的內容。因為在for循環語句
for (i=0 ;i<3 ;i++ ) printf ("%d " ,&a[i] );
中,&a[i]表示數組各個元素的地址。i=0時,&a[0]和a一樣,均表示數組a的首地址,所以語句
printf ("%d " ,&a[0] );
和語句
printf ("%d " ,a );
的輸出內容是相同的。隨著i的變化,&a[i]將分別對應數組a的各個元素的地址。程序輸出內容如下:
1245044 1245048 1245052 1245044
正如分析的一樣,第1項和第4項的輸出相同。
輸出內容應使用數組元素的名字a[i],即
for (i=0 ;i<3 ;i++ ) printf ("%d " ,a[i] );
如果先定義數組,如何為數組元素賦值呢?scanf要求的是存儲元素的地址。普通變量是在變量前加「&」號,數組元素的標記也是使用「&」號,所以可以一個一個地賦值。
【例2.12】使用scanf語句為數組賦值的例子。
#include <stdio.h> void main ( ) { int a[3] ,i ; printf (" 輸入數組內容:" ); for (i=0 ;i<3 ;i++ ) scanf ("%d" ,&a[i] ); printf (" 輸出數組內容:" ); for (i=0 ;i<3 ;i++ ) printf ("%d " ,a[i] ); printf ("\n" ); }
程序運行示範如下。
輸入數組內容: 3 5 7 輸出數組內容:3 5 7