请教内存的思考题

程序崩溃。这个还可以理解,因为将指针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是基础啊!千万不要放弃,不然其他语言你也别想学多深了!还有你要多看书,把原理都放在心里!学编程语言最重要的是能解决实际问题,学一学从实际问题到程序的原理,这样会事半功倍的

来源:英超直播

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