本節書摘來自異步社群《指針的程式設計藝術(第二版)》一書中的第1章,第1.2節,作者 蔡明志,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
指針的程式設計藝術(第二版)
我們把焦點轉到一維數組,範例addressarray-5展示了如何調用scanf函數,并從鍵盤向數組輸入資料。
範例addressarray-5
輸出結果

這個數組有5個元素,分别為x[0]、x[1]、x[2]、x[3]和x[4]。每一個元素都是整數變量,是以隻要在這些變量前加上&,即表示該變量在記憶體的位址。程式使用循環方法,輸入資料給x數組,如下所示:
<code>`</code>javascript
for(i=0; i<5; i++)
{
printf("請輸入x[%d]的整數值: ", i);
scanf("%d", &x[i]);
}
請不要在已表示數組名前又加上&,如該示例中的x數組,因為x已表示位址,是以再加上&,等于畫蛇添足。
我們也可以在定義數組時順便指定初始值,如下例所示。
表示數組有五個元素,分别為x[0]、x[1]、x[2]、x[3]、x[4],其所對應的記憶體位址,表示為&x[0]、&x[1]、&x[2]、&x[3]、&x[4]或x、x+1、x+2、x+3、x+4。如果想知道數組中的每一個元素所在的記憶體位址,可利用%p或%x的對應格式。請參閱範例addressarray-10。
範例addressarray-10
由于這個數組的資料類型是int,是以元素之間的位址相隔4位元組。當x等于0012ff4c,x+1是0012ff50。要注意這裡的1,是表示每一機關所占的位元組(bytes)數,就此數組而言,x+1等于0012ff4c + (1*4),由此得到0012ff50。如下圖所示。
若将資料類型改為double,則情形又會如何?請參閱範例addressarray-15。
範例addressarray-15
由于此範例的數組資料類型為double,是以元素之間的位址相隔8位元組。