| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1260 人关注过本帖
标题:求大虾指导一个指针数组的问题
只看楼主 加入收藏
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 9楼 蚕头燕尾
..我没说书上一定是对啊
我只是想知道为什么放在一个单独的函数中和放在main函数中结果会不一样
2013-06-14 01:39
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
嗯嗯,那楼主知道是什么地方不对了么?

总之我还是感觉

free和*p++=NULL
二者的顺序有待思考。

楼主知道了问题之后跟大家分享一下哈,

我能看出来的问题就是这样了。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:42
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:0 
p是一个数组。*p是数组的地址。而数组的元素是指针! 这位黑猫的毫无疑问是对的
你理解那句printf   自然你就理解
同时你释放的*p  是 p数组的首地址
而数组并不能释放。

一同学习, 一同进步
2013-06-14 01:44
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
不不,我的意思是,,

楼主贴出来的代码,

至少说,在我的vs下,没有一个是能够正常运行的

我说的建议是指不管你把代码单独写成函数还是写在main里面

我感觉都需要进行修改 的一个错误。

看来论坛就是不如现场聊天的。。。

回复总有时间误差,所以造成误解。

我没有批评的意思,仅仅阐述个人观点。嘻嘻~~


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:45
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 13楼 dengluoy
我的问题不是在free上面 书上的free是希望读者养成释放内存的习惯 测试中去掉free似乎没影响
我的问题是在*p++=NULL这行中 他在独立的函数 str_out中是不会有问题的 在main()中则会有问题

(以下个人观点基于第一个代码)
我对我的指针数组p的理解 : p中包含三个指针 p[0] p[1] p[2] 赋值后指向 a,b,c字符串的首地址
调用函数的时候传入p 从而str_out函数中的p数组的地址和main中的p是一样的
第一次循环的时候 p指向p[0] *p则是读取p[0]中存储的数据 即字符串a的首地址 printf在接收到字符串首地址之后便能打印出该字符串
*p++=NULL的作用是将现在的p中的存储数据设为NULL 然后将p递增从而指向p[1](或p[2]) 通过下一次的循环的*p能够读取b(或c)字符串的首地址  
由此我的第一个代码在我的环境中是可以编译执行的  我的问题出在了第二个代码中

以上是个人观点 有问题欢迎指出 本人也只是小白


BTW: 没装VS,所以不能测试 不好意思
2013-06-14 02:09
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
回复 15楼 sisox
*p++=NULL这行 在独立的函数 str_out中p是函数入参,是指针,做++是没问题的,是不会有问题的 在main()中p是数组,p是数组名也就可以说是指针常量,常量不能改变,所以做++会有问题。另外free是释放malloc出来的内存,问题的 在main()中p是数组,p是数组名也就可以说是指针常量,常量不能改变,所以做++会有问题。另外free是释放malloc出来的内存,其他变量都是系统自动分配的,系统会去处理,不需要free

总有那身价贱的人给作业贴回复完整的代码
2013-06-14 06:54
神经不正常
Rank: 2
等 级:论坛游民
帖 子:16
专家分:52
注 册:2013-5-23
收藏
得分:0 
free(*p);是和 malloc() calloc() realloc() 函数配对使用的。也就是有一次申请(malloc),就必须有一次释放 (free),不能多也不能少。
就像括号一样,不能单独使用左边的或右边的。

在这个例子中free(*p)的使用是不和是的。
2013-06-14 10:02
Han_FlyB
Rank: 6Rank: 6
等 级:侠之大者
帖 子:143
专家分:424
注 册:2013-3-25
收藏
得分:0 
楼主你看一下会不会是 *(p++)=NULL;
因为会有符号优先级的
2013-06-14 10:36
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 17楼 神经不正常
恩 这个free确实是多余的 程序前面有用malloc() 我单独拿出来的时候没去掉free 但是编译的时候free是不会有报错的
错误出在*p++=NULL这句上 我觉得16L已经解释清楚了
2013-06-14 11:37
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
嗯嗯,学习啦~~


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 11:48
快速回复:求大虾指导一个指针数组的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017941 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved