2015-12-10 41 views
1

我很困惑scanf()。 當我們從鍵盤讀取數據時,我們何時使用&。 據我的理解,&總是在你想讓程序讀入某些內容時使用。何時使用&當讀取輸入

Eg. scanf("%c",&varA) or scanf("%d",&varA) 

我也明白,當你使用一個指針,你不爲scanf()使用&

如果我想scanf()東西到數組呢?我使用&? 我知道一個數組的名稱計算爲數組的第一個元素的地址,這也是一個指針。

+1

你只需要提供一個指針作爲參數來存儲結果。如果你使用非指針變量,那麼你使用'&'來獲取它的地址。另一方面,如果指針從別處傳遞到函數,那麼就可以直接使用它而不用'&'。如果你想存儲'a [i]',你可以使用'&a [i]'或者'(a + i)'得到相同的結果。 –

回答

3

傳遞給scanf後的第一個參數是所有地址。您需要提供變量的地址以分配輸入的值。

這就是爲什麼當您讀取變量的值時,必須使用&運算符來傳遞其地址。

例如,

int n; 
scanf("%d", &n); 

還可以分配變量的地址的地址的指針,並使用該:

int n; 
int *p = &n; 
scanf("%d", p); 

在陣列的情況下,數組的名稱是實際的基地址,即第一個元素的地址。您可以使用在scanf太:

int arr[4]; 
scanf("%d", arr); // the input value will be stored in a[0] 
scanf("%d", &arr[0]); // does the exactly same thing as the statement above 

scanf("%d", &arr[1]); // reads the input into a[1] 
scanf("%d", a + 1); // does the same as above 

這種方式是閱讀串有用而不輸入空格:

char str[64]; 
scanf("%s", str); 
0

如果我想scanf()到數組中?

這取決於你是什麼陣興趣。

  • 如果它是一個字符數組,那麼你可以使用scanf("%s", s);沒有&操作(給出s是字符數組)。
  • 如果它是數值數組,那麼對於單個數組元素,則需要scanf("%d", &a[i]);,因此您將需要&運算符。
3

scanf()使用format string,所以對於特定的變量一個瞭解還需要了解哪些將給出變量的地址


1)對於正常變量int a,&是需要的,scanf("%d", &a);

2)對於一個指針變量int* a,不需要&scanf("%d", a);

3)對於數組INT a[10]

  • 雖然僅使用名字,沒有&scanf("%s", a);
  • 在使用元素時,需要&scanf("%d", &a[0]);