6
A
回答
12
它需要更改變量。由於C中的所有參數通過值傳遞如果您希望某個函數能夠更改參數,則需要傳遞一個指針。
這裏是展示它的超級簡單的例子:
void nochange(int var) {
// Here, var is a copy of the original number. &var != &value
var = 1337;
}
void change(int *var) {
// Here, var is a pointer to the original number. var == &value
// Writing to `*var` modifies the variable the pointer points to
*var = 1337;
}
int main() {
int value = 42;
nochange(value);
change(&value);
return 0;
}
3
因爲否則就只能改變一個副本而不是原始。
2
scanf需要addressOf運算符(&),因爲它將指針作爲參數。因此,爲了傳遞一個變量來設置一個傳入的值,你必須把一個指針放在變量之外,這樣它才能被改變。
指針必須傳遞給scanf的原因是,如果您只是傳遞了一個變量,您將無法直接更改scanf中的變量,因此您無法將其設置爲scanf所讀取的值。
希望這會有所幫助。
6
C函數的參數是總是「傳遞由值」,這意味着該函數scanf
只看到任何的指定作爲自變量表達式的電流值的副本。
在這種情況下,&i
是一個指向變量i
的指針值。 scanf
可以用這個來修改i
。如果您通過i
,那麼它只會看到一個未初始化的值,其中(a)是UB,(b)scanf
不知道如何修改i
的足夠信息。
1
scanf()
存儲值,所以它需要一個地方來存儲它們。
這是通過提供使用addressof
或&(與符號)運算符來存儲值的地址(在指針中) 來完成的。
0
sscanf的不需要&
int decimal;
int *pointer = &decimal;
scanf("%d", pointer);
上面的代碼是有效
3
這是沒有必要的。
char s[1234];
scanf("%s", s);
工作得很好,沒有一個單一的&
任何地方。什麼scanf
和公司需要的是指針。爲了讓它修改一個特定的變量,你傳遞該變量的地址。對於默認情況下發生的幾種類型。對於其他人,您使用&
來獲取地址(獲取指向該變量的指針)。
相關問題
- 1. 爲什麼我不需要使用scanf符號? (在C)
- 2. 爲什麼在scanf中不需要address操作符?
- 3. 爲什麼需要
- 4. 爲什麼需要「{} \」?
- 5. scanf失敗爲什麼?
- 6. 我們什麼時候需要清除scanf緩衝區?
- 7. 爲什麼需要copy_to/from_user?
- 8. 爲什麼Grails需要Xerces?
- 9. 爲什麼我需要「&」?
- 10. 爲什麼需要Server.HtmlEncode?
- 11. 爲什麼需要$ = jQuery
- 12. 爲什麼//需要的/
- 13. 爲什麼這需要malloc'd?
- 14. 爲什麼RVM需要YAML?
- 15. 爲什麼mybatis需要@Param?
- 16. 爲什麼需要DevKit
- 17. 爲什麼HttpClient需要httpasyncclient?
- 18. 爲什麼需要NotificationCompat?
- 19. 爲什麼需要session_ destroy()?
- 20. 爲什麼需要光標?
- 21. 爲什麼需要isLargeArc?
- 22. 爲什麼PayPal需要DoExpressCheckoutPayment?
- 23. 爲什麼android需要jvm
- 24. 爲什麼initWithCoder需要self.property?
- 25. 爲什麼Hbase需要WAL?
- 26. 爲什麼Apache需要SSLCertificateKeyFile?
- 27. 爲什麼active_support需要sinatra
- 28. 爲什麼需要「bear_moved」?
- 29. 爲什麼PhotoCamera需要VideoBrush?
- 30. 爲什麼需要線程
你給它一個'*指針**。 –