詮釋的地址是一種原始,基元是存儲在內存中的數據。每個數據塊都被設置在一個特定的存儲器塊中,這些塊具有引用它們的「存儲器地址」。
如果定義int i = 1
計算機分配在存儲器中的整數(在一個塊中,與存儲器地址FE 0xF00000)和當引用該整數作爲i
,正在訪問所存儲的值將其值設置爲1。 在0xF00000中,碰巧是1
。
在C中,您還可以通過在&(與符號)前加上i
引用(它分配的內存地址),通過這樣做,您將獲得變量的內存地址而不是其值。
i === 1; // true
&i === 1; //false
&i === 0xF00000; //true
該內存地址可以分配給一個指針(一個變量,「點」到一個內存地址,從而,有沒有它自己的價值),所以它可以直接訪問過dereferencing it這樣你就可以收集值在那個內存塊裏面。這是使用*
int i = 1; //this allocates the
int *ptr = &i; //defines a pointer that points to i address
/* now this works cause i is a primitive */
printf("%d", i);
/* this works also cause ptr is dereferenced, returning the
value from the address it points, in this case, i's value */
printf("%d", *ptr);
在您的例子來實現,要傳遞一個參考的printf(printf的請求的值,並接收內存地址),所以它不工作。
希望這有助於你瞭解C和指針更好
之前'sum'取出和,因爲你想給printf的價值,而不是價值 – Ctx
歡迎StackOverflow上的地址。 請參考[遊覽], 學習問好問題stackoverflow.com/help/how-to-ask, 做個[mcve]。 – Yunnosch
您將'scanf'與'printf'混淆在一起... – LPs