善于总结得以提高水平、积累知识。

本文是对CSDN论坛话题——指针的危害的一篇总结。在这个话题中,众多网友对C/C++指针的使用进行了讨论。这是一个老话题,老调重谈,但却非常有意义,因为指针跟程序员是如此的亲密无间。

关于指针的使用,众多的C/C++程序员对它是即爱又恨,它带给我们灵活,也带给我们伤害。在每个C/C++程序员的成长过程中,相信都有受到过指针伤害的经历。曾经,我也对它产生过抗拒……

那么,我们该如何正确看待指针呢?下面是一些网友关于这个话题的回答:

@对于有经验的程序员,这不是问题呀。本来,程序员就应该对自己的代码负责。

@勇于面对BUG,善于解决BUG。

@不用指针的话,智能指针啊vector啊string啊又是怎么实现的?
莫非楼主就是传说中的“模块由别人来封装,我只要搭积木就可以了”式程序员?

标准库无疑效率高又安全
但如果你只会用标准库却做不到自己实现修改创新,那你这辈子也就只是个搭积木的

@汽车的车祸率那么高,你会为了避免出车祸一辈子骑自行车么?你应该做的是提升自己的驾驶技术,遵守驾驶规范,保证自身安全。

@

几十万行C++从来就没有因为用错指针出bug(故意的除外)的什么水平?

细节决定成败!

@VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
@

所谓难者不会,会者不难。
另外,在武术中,所谓无招胜有招,无剑胜有剑。在七剑下天山中,白发魔女只用一根树枝和一条腰带就破了齐真君独创的风雷剑法。
只有学艺不精的人才喜欢那语言说事,说这不好那也不好。高手随便用一种语言都可以工作,完成所需的功能。

从中可以看出,大家还是倾向于指针的使用。而且着重点是:深刻理解指针,提升水平。

此外,有资深网友推荐了一本书:《失控:全人类的最终命运和结局》(美)凯文·凯利

下面是关于一个指针使用的例子,看看你理解多少?是否真正的理解了指针?

void get(char *p)
{
p=(char *)malloc(100);
}

void main()
{
char *str=NULL;
get(str);
strcpy(str,"hello world");
printf(str);
}

这段程序你怎么看呢?它是什么原因呢?传参失败吗?这里的p还算不算局部变量呢?

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

   
© 2012 velep.com | reille blog | 管理| 粤ICP备12094833号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量