網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論

回覆
 
主題工具
  #1  
舊 2014-06-15, 06:22 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,059
預設 指標的位址?

以下是書上的習題,要求變數x,以及指向數x的指標*p,以及指向指標*p的另一指標**mp的位址。

書上的解答是:
引用:
#include <stdio.h>

int main(void)
{
int *p,**mp,x;
p=&x;
mp=&p;
**mp=10;

printf("%p,%p,%p",&x,p,mp);

return 0;
}
結果程式跑出來後,其實&x和p的值是一樣的。
但我的疑問是,既然是三者的「位址」,不是應該寫成printf("%p,%p,%p",&x,&p,&mp);嗎?

thanks

剛操作時發現, printf("%p %p", p,&p) 這二者的值是一樣的? 所以對於指標變數,有沒有加&,印出來的%p都一樣,所以未必要加&嗎?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-06-15, 07:20 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

printf("%p %p", p,&p)
p,&p一样吗?我这边是不一样的哦
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #3  
舊 2014-06-15, 07:22 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,059
預設

引用:
作者: yumi 查看文章
printf("%p %p", p,&p)
p,&p一样吗?我这边是不一样的哦
呵,我剛才也算了一次,確實不一樣。 還沒來得及改就被你發現了。

說實話,我反覆把玩,頭都暈了。

例如我想知道在指標p中儲存的值,也就是說變數x的位址,我能用 %d來求p嗎?以 printf("%d", p); 為例?

我自己操作了一下,變了一些方式,卻得到不同的答案,所以我猜這是錯的?不能用%d來直接求出p裡儲存的值。是這樣嗎?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #4  
舊 2014-06-15, 08:28 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

%p和%d打印出来的数值是相等的,前者打印的是16进制,后者是10进制
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #5  
舊 2014-06-15, 08:48 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,059
預設

引用:
作者: yumi 查看文章
%p和%d打印出来的数值是相等的,前者打印的是16进制,后者是10进制
thanks。

但我剛才去換算網站作了換算,換算過來並不符合?
http://tool.httpcn.com/Tool/JinZhiZhuanHuan.html

000000000023FE54 2358868 這是我這個程式得的答案,拿這去換算,結果不符合?


但我操作了一些方式,如下:
引用:
#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

引用:
#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

為何我只是中間一個求的是p的%p,另一個求&p的%p,結果二者最後跑出來的三個位址就都不同了?

難道是因為我二次求的內容不太一樣,系統配置記憶體的位址就不太一樣了嗎?而如果我又改回原來的方程式,求得的答案又和以前相同,這表示記憶體配置又回到從前。所以就算這個程式裡並未增減任何變數,只因求的內容有不同,記憶體就會有不同位址的配置?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #6  
舊 2014-06-16, 08:26 AM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

那个转换网页,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  
舊 2014-06-16, 04:01 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,059
預設

引用:
作者: yumi 查看文章

后面的两个程式,在我的机器上,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
thanks.
但如果您將二者分在二個程式中執行,似乎%d p的值會不同喔?二者在同一程式中執行確實是一樣的。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #8  
舊 2014-06-16, 09:10 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

晕,我这边,不论是放在一个程式里还是放在二个程式里,得到的数字,都是:左边的与左边的相同、右边的与右边的相同,只有中间的不同。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #9  
舊 2014-06-16, 09:40 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,059
預設

引用:
作者: yumi 查看文章
晕,我这边,不论是放在一个程式里还是放在二个程式里,得到的数字,都是:左边的与左边的相同、右边的与右边的相同,只有中间的不同。
為何會如此呢?
我操作結果還是如下:
#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/ 去貼上這二個程式碼,跑出來的結果也是兩兩不同?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #10  
舊 2014-06-16, 11:15 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

用dev-c++编译,两个数字相同
换个编译器,就不同了
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 10:24 AM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.