這個問題在這里已經有了答案: 為什么在 scanf 中不需要地址運算子? (1 個回答) 6 小時前關閉。
我開始學習 C 并且我注意到有時我們使用
scanf("%d", &x[i])
有時它很簡單:
scanf("%d", x[i])
有人可以向我解釋一下區別嗎?我不明白我們什么時候必須放 & 什么時候不使用它。另外我不明白我們什么時候必須使用*x?它有什么作用?
uj5u.com熱心網友回復:
使用它的原因&是為了獲得一個指標。 scanf總是需要指標,因為它會用它來給你一個值。但&不是獲取指標的唯一方法。
如果您有單個int、char、long、float或double變數,則需要使用 a&來獲取要傳遞給 的指標scanf:
int i;
scanf("%d", &i);
char c;
scanf(" %c", &c);
long l;
scanf("%ld", &l);
float f;
scanf("%f", &f);
double d;
scanf("%lf", &d);
如果你正在讀一個字串,但是,你通常不會需要一個&:
char str1[10];
scanf("%9s", str1);
char *str2 = malloc(20);
scanf("s", str2);
&在這兩種情況下您都不需要 a 的原因是您已經有了一個指標,盡管對這一事實的完整解釋將需要比我懷疑我有時間在這個答案中更多的詞。
這最終成為一個scanf非常有問題的功能的原因之一。 scanf在您作為 C 程式員的最初幾周內最有用,當您有很多不同的東西要學習時,并且scanf似乎是將用戶輸入的值輸入到您的程式中以使其作業的一種簡單方法。但是,scanf如果不了解指標,您就無法真正理解如何呼叫,而且指標也不是您以后想要學習的東西。
所以首先,一套合理的成功scanf使用規則是:
| 如果你的格式是 | 你應該: |
|---|---|
%d, %f,%lf |
使用 & |
%c |
使用&, 并使用額外的空格:" %c" |
%s |
不使用 & |
另請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362488.html
上一篇:c中使用結構的復雜產品?
