程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言指針問題【精粹+附圖】

C語言指針問題【精粹+附圖】

編輯:C語言問答

C語言指針問題【精粹+附圖】

<p></p> <p> </p> <p>運行的結果為什麼是7,我覺得運行的結果應該是0啊</p> <p>看我分析的有錯嗎:①:調用fun("0ABCDEF"),將字符串傳遞給s[]</p> <p>②:在fun函數裡面,char *p=s; 指針變量p指向s[]數組中的首個元素0;所以*p等於0</p> <p>③p-s=0-0 等於0,</p> <p>請問大神我①②③中的哪裡錯了?</p> <p>最近考計算機二級,麻煩神的詳細講解。(詳解,最好向我這樣①②③這樣的)</p>

最佳回答:

我是這樣看的,畫一個內存的存儲結構圖就好了:

1.字符串”0ABCDEF“在內存中的存儲格式,如下圖所示,當調用fun函數時,語句*p=s,表示將s指向的內存地址賦給了指針p,此時指針p和s都指向了堆棧頂部的地址 0000 0001。

2.在判斷while(*p!=0)中,具體是判斷p指向的字符與數字0之間的比較,顯然,只有當p指向"\0'時,這個while循環才會結束,此時p的地址為0000 0008,但是s的地址依然在0000 0001,具體如下圖所示:

3.因此,當執行return時,p-s的值就是0000 0008 - 0000 0001,顯然結果就是7了。


當然,具體的地址肯定不是如此,不過應該不影響理解的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved