我是這樣看的,畫一個內存的存儲結構圖就好了:
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了。
當然,具體的地址肯定不是如此,不過應該不影響理解的。