#1
|
||||
|
||||
指標的位址?
以下是書上的習題,要求變數x,以及指向數x的指標*p,以及指向指標*p的另一指標**mp的位址。
書上的解答是: 引用:
但我的疑問是,既然是三者的「位址」,不是應該寫成printf("%p,%p,%p",&x,&p,&mp);嗎? thanks 剛操作時發現, printf("%p %p", p,&p) 這二者的值是一樣的? 所以對於指標變數,有沒有加&,印出來的%p都一樣,所以未必要加&嗎? |
#2
|
|||
|
|||
printf("%p %p", p,&p)
p,&p一样吗?我这边是不一样的哦
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |
#3
|
||||
|
||||
呵,我剛才也算了一次,確實不一樣。 還沒來得及改就被你發現了。
說實話,我反覆把玩,頭都暈了。 例如我想知道在指標p中儲存的值,也就是說變數x的位址,我能用 %d來求p嗎?以 printf("%d", p); 為例? 我自己操作了一下,變了一些方式,卻得到不同的答案,所以我猜這是錯的?不能用%d來直接求出p裡儲存的值。是這樣嗎? |
#4
|
|||
|
|||
%p和%d打印出来的数值是相等的,前者打印的是16进制,后者是10进制
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |
#5
|
||||
|
||||
thanks。
但我剛才去換算網站作了換算,換算過來並不符合? http://tool.httpcn.com/Tool/JinZhiZhuanHuan.html 000000000023FE54 2358868 這是我這個程式得的答案,拿這去換算,結果不符合? 但我操作了一些方式,如下: 引用:
引用:
為何我只是中間一個求的是p的%p,另一個求&p的%p,結果二者最後跑出來的三個位址就都不同了? 難道是因為我二次求的內容不太一樣,系統配置記憶體的位址就不太一樣了嗎?而如果我又改回原來的方程式,求得的答案又和以前相同,這表示記憶體配置又回到從前。所以就算這個程式裡並未增減任何變數,只因求的內容有不同,記憶體就會有不同位址的配置? |
#6
|
|||
|
|||
那个转换网页,2358868转换成16进制显示23fe54,而小写的23fe54转换成10进制也是2358868,是符合的。但是大写的000000000023FE54却转换成别的数字了,这个应该是网页有点问题。(64进制区分大小写,16进制不区分大小写,23FE54就是23fe54即2358868)
后面的两个程式,在我的机器上,dev-c++,打印的数字只有中间的不同,左右两个都是相同的。 #include <Stdio.h> int main(void) { int x,*p; p=&x; x=10; printf("%p %p %d\n",&x,&p,p); printf("%p %p %d\n",&x,p,p); return 0; } 0022FF74 0022FF70 2293620 0022FF74 0022FF74 2293620
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 此篇文章於 2014-06-16 08:33 AM 被 yumi 編輯。 |
#7
|
||||
|
||||
引用:
但如果您將二者分在二個程式中執行,似乎%d p的值會不同喔?二者在同一程式中執行確實是一樣的。 |
#8
|
|||
|
|||
晕,我这边,不论是放在一个程式里还是放在二个程式里,得到的数字,都是:左边的与左边的相同、右边的与右边的相同,只有中间的不同。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |
#9
|
||||
|
||||
為何會如此呢?
我操作結果還是如下: #include <Stdio.h> int main(void) { int x,*p; p=&x; x=10; printf("%p %p %d",&x,p,p); return 0; } 000000000023FE54 000000000023FE54 2358868 000000000022FE54 000000000022FE54 2293332 #include <Stdio.h> int main(void) { int x,*p; p=&x; x=10; printf("%p %p %d",&x,&p,p); return 0; } 000000000023FE5C 000000000023FE50 2358876 000000000022FE5C 000000000022FE50 2293340 只因紅字之處不同,而結果都不同?綠色的是我在桌機上的結果,藍色的是我在筆電上執行的結果。 我到 http://codepad.org/ 去貼上這二個程式碼,跑出來的結果也是兩兩不同? |
#10
|
|||
|
|||
用dev-c++编译,两个数字相同
换个编译器,就不同了
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |