請教內存的思考題

程序崩潰。這個還可以理解,因爲將指針str的傳給p 但是值傳遞所以Test函數中的str值一直爲NULL;
  
疑問一: 但是形參用指向指針的指針就可以,如下 這和上面有什麼不同之處麼
疑問二: 對於下面的一個例子,雖然可以輸出hello 但是由於沒有釋放malloc申請的空間,造成內存泄露,這怎麼解決?

“1、無法改變形參p的值 但是可以改變其指向的內容”
  我對於指針的指針還是不太理解,代碼看上去是將&str 傳給*p 而GetMemory中僅是修改了*p的值
  那麼 不是和將str傳遞給p 是一個道理麼?

*p你可以認爲就是p的值 只不過這個值是個地址 比如0x8048000之類的 而我們關心的是這個0x80480000這個地址裏面存放的內容

而你的程序中還要該變p的值 所以只能把*p作爲指針所指向內容 而這個就需要二級指針**p

不好意思 表達不好 還是沒讓你明白

形參是值傳遞的 是不能改變的 
但是現在又要改變形參的話 就不能把要改變的內容作爲形參傳進去 
要做一下轉化 比如作爲形參所指向的內容傳進去 就可以改變了

LZ可以寫個簡單的關於指針例子 
然後gdb一定 看看指針的值 指針的地址 指針所指向的內容分別是什麼東東
上題str不指向任何地址,所以將不存在的地址賦給p指針出現錯誤
下題str不指向任何地址,但str的地址是存在的,因此將str的地址賦給*P指針是成立的
實際上因爲是*p指向分配的內存,結果只要另*p=NULL就可以了

看來表達起來不方便哦,建議LZ自己寫點例子去單步調試一下,也許就豁然開朗了

這個問題,暫時沒明白不要緊,日子久了就懂了。樓上幾位已經說得不錯了,樓主慢慢理解吧,彆着急。

VC調試時按Alt+8,TC或BC用TD調試,打開彙編窗口看每句C對應的彙編不就啥都明白了嗎。
(Linux或Unix下應該也可以在用GDB調試時,看每句C對應的彙編。)
想要從本質上理解C指針,必須學習彙編以及C和彙編的對應關係。
從彙編的角度理解和學習C語言的指針,原本看似複雜的東西就會變得非常簡單!
到了大學以爲會舒服多了!沒想到剛上大一就學c語言好鬱悶的。上到c語言課就頭昏大瞌睡,我想大家都有這樣的經驗吧!前幾天在摩托論壇上問了一個版主,他說他自學的c語言,好佩服他的學習能力啊!
真不知道那些it精英是怎麼把c語言喫透的!有經驗的交流下啊!~~~~~~~~

不一定要聽老師講, 我認爲這樣反而會限制你的進度. 在書上看到個新的語句就馬上寫程序去用它, 平時沒事可以自己設一個問題用程序去解決, 慢慢就熟練了.

我覺得你應該去稍微瞭解一下程序執行原理,這樣可以有助於你學習c語言!!c是基礎啊!千萬不要放棄,不然其他語言你也別想學多深了!還有你要多看書,把原理都放在心裏!學編程語言最重要的是能解決實際問題,學一學從實際問題到程序的原理,這樣會事半功倍的

來源:英超直播

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章