scanf函式輸入時為什麼要加

2022-03-27 20:52:12 字數 788 閱讀 7211

對於scanf函式,它將引數視為乙個位址,將鍵盤輸入的字元傳到這個位址中去,通常我們都是用的&位址的符號,事實上如果乙個值恰好是乙個位址的話,不加&也一樣可以的:

如下例(測試環境為win7 64位):

#include

void main()

int n = 0x18ff48;

int m = 0x18ff44;

//檢視此時n,m的位址和值

printf("%x:%x\r\n",&n,n);

printf("%x:%x\r\n",&m,m);

scanf("%p",n);

scanf("%p",m);

//檢視此時n,m的位址和值

printf("%x:%x\r\n",&n,n);

printf("%x:%x\r\n",&m,m);

getchar();

這裡我們將n,m的值設為乙個位址格式的值,而且該位址還是空閒記憶體,在scanf輸入的時候略去&,這時候scanf會將n,m的值作為乙個位址,向該位址內寫入資料而不是改變m和n的值。 

執行後結果如圖:                     

scanf輸入的值實際上是傳給了位址18ff48和18ff44處,如果我們加上&,則改變的會是18ff44和18ff40處的值,這也就證明了scanf函式就是將引數視為乙個位址,如果乙個引數值恰好是個位址格式值,不用加&符號也可以賦值,只不過是將引數值作為位址而已。

scanf是什麼意思,為什麼scanf前加

scanf函式返回成功讀入的資料項數,讀入資料時遇到了 檔案結束 則返回eof。scanf d d a,b 函式返回值為int型。如果a和b都被成功讀入,那麼scanf的返回值就是2 如果只有a被成功讀入,返回值為1 如果a和b都未被成功讀入,返回值為0 如果遇到錯誤或遇到end of file,返...

為什麼要加 include stdafx h

所謂標頭檔案預編譯,就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。預編譯標頭檔案通過編譯stdafx.cpp生成,以工程名命名,由於預編...

為什麼react列表要加key

遍歷物件的每乙個屬性深度對比是非常浪費效能的 react 使用列表的key來進行對比,如果不指定,就預設為 index 下標 那麼,為什麼 不指定 key 用 index 下標 是不好的呢?假設現在有這樣一段 const users users.map u,i 它會渲染出這個 dom 樹 bob s...