2012-11-17 135 views
3

這可能是一個非常基本的問題,但我無法在任何地方找到答案,這是我用C編程幾周後第一次遇到問題。本質上,如果我寫一些代碼看起來像這樣:printf給我錯誤的輸出C

int size; 
scanf("%d", &size); 
printf("size is %d", &size); 

如果我輸入,也就是說,大小= 2,該程序將打印背出沿着133692線或類似的東西數量。爲什麼是這樣?我在這裏做錯了什麼?

+0

你知道'&'操作符在第一個地方做什麼嗎? – qrdl

+0

...並沒有一個答案被接受! – 2012-11-17 19:16:49

+0

@ user9000他是一個新用戶,這是他的第一個問題,所以......需要時間 –

回答

1

你要做的:

printf("size is %d", size); 

代替。這將打印int對象size的值。

printf("size is %d", &size); 

是不確定的行爲。

+1

你是什麼意思未定義?很明顯,後者打印大小的地址。 (並且編譯器給出警告) –

+2

@AkiSuihkonen'd'轉換說明符需要'int'參數,將類型指針參數傳遞給'int'會調用未定義的行爲。 – ouah

+0

如果您想要打印&size的指針值,則應使用%p而不是%d。 – Snips

0

您正在打印size的地址,即&size

只需傳遞一個簡單的size即可。

0

刪除printf語句中的&作爲&size - >打印地址。

 printf("size is %d", size); 
0

調用約定在printf和scanf中是不同的。

printf的參數通常是值(不是&),但scanf必須有指針。 (&)
(你不能把一個新值,例如1.0,但你可以打印...)

3

嘗試

printf("size is %d", size); 

&給你的內存位置(地址)變量。

printf("size is %d", &size); 

所以,上述將打印的size的存儲位置(地址),而不是存儲在size值。