[C]c語言中,scanf裡面要是陣列要不要加&?
阿新 • • 發佈:2019-01-05
先上一段程式碼給大家看下
#include<stdio.h>
int main(){
int a[100];
int n,i;
scanf("%d",&n);//輸入個數
for(i=0;i<n;i++)scanf("%d",&a[i]);//這裡也可以用 scanf("%d",a+i);
for(i=n-1;i>0;i--)printf("%d ",a[i]);
printf("%d\n",a[i]);
}
然後我解釋一下:
scanf傳得必須是指標,也就是地址。
比如int a;就需要&a;但是如果是陣列,陣列本身表示的是陣列首元素的地址。也就是int a[10]裡a就表示a[0]的地址;那a[3]的地址呢?可以這樣,&a[3]
所以陣列的scanf賦值是要加&的。
但是printf裡因為輸出的不是地址而是值所以不用加&。
為了更好的對對地址進行操作的函式的理解,我們再拿二維陣列解釋一下。
我有一個二維陣列st_edge** edge
我想讓當指標位置指向的不是每一行(維)的最後一個null節點時,讓指標在這個一維陣列中往後移動,直到移動到這一行的最後一個非null節點的下一個位置,那麼我可以
while(*edge != NULL){
edge = &((*edge) ->next);
}
上面的意思即為當一維指標不指向null時,將指向二維陣列的指標指向一維指標(*edge)下一個地址的地址,即二維指標的地址,從而實現了二維指標的移動。