[英]What happens if I pass a variable value instead of a variable reference in scanf?
我有這個代碼:
int a;
scanf("%d", &a);
printf("You entered: %d", a);
這工作得很好,但我想知道如果我傳遞變量值而不是像scanf("%d", a)
這樣的scanf
中的變量引用會發生什么。
我沒有從編譯器得到錯誤,但也沒有 output 。 這里發生了什么?
在 scanf 中, "%d"
期望一個指向int
的指針,這意味着一個指向將存儲值的變量地址的指針,如果你傳遞a
你將只是傳遞int
沒有辦法存儲值,因為scanf
贏了不知道在哪里。
這樣做將調用未定義的行為。
基本上 & 是一個返回操作數地址的運算符。 如果你在 scanf 中給出不帶 & 的變量 a,它將按值傳遞給它,這意味着 scanf 將無法設置它的值供你查看。 通過引用傳遞它 - 使用 & 實際上傳遞一個指向 a 的指針 - 允許 scanf 設置它。
scanf
期望與%d
轉換說明符對應的參數是int
object (類型為int *
)的地址。 a
包含的任何值都將被解釋為地址1 。
這樣做的行為是未定義的 - 編譯器不需要在翻譯期間發出診斷,並且運行時環境不需要拋出任何類型的異常。 根據a
中包含的值,您可能會遇到運行時錯誤,或者您可能會破壞另一個數據 object,或者您的代碼可能會在沒有任何明顯錯誤的情況下運行,或者可能會發生完全不同的事情。
sizeof (int) == sizeof (int *)
的系統上 - 對於像 x86_64 這樣的系統,情況並非如此,因此scanf
會將a
之外的字節視為地址的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.