`
guoyiqi
  • 浏览: 1002192 次
社区版块
存档分类
最新评论

(9)让你不再害怕指针--指针的安全问题

 
阅读更多

看下面的例子:

例十八:

char s = 'a';
int *ptr;
ptr = (int *)&s;
*ptr = 1298;

指针ptr 是一个int *类型的指针,它指向的类型是int。它指向的地址就是s 的首地址。在32 位程序中,s 占一个字节,int 类型占四个字节。最后一条语句不但改变了s 所占的一个字节,还把和s 相临的高地址方向的三个字节也改变了。这三个字节是干什么的?只有编译程序知道,而写程序的人是不太可能知道的。也许这三个字节里存储了非常重要的数据,也许这三个字节里正好是程序的一条代码,而由于你对指针的马虎应用,这三个字节的值被改变了!这会造成崩溃性的错误。

让我们再来看一例:

例十九:

char a;
int *ptr = &a;
ptr++;
*ptr = 115;

该例子完全可以通过编译,并能执行。但是看到没有?第3 句对指针ptr 进行自加1 运算后,ptr 指向了和整形变量a 相邻的高地址方向的一块存储区。这块存储区里是什么?我们不知道。有可能它是一个非常重要的数据,甚至可能是一条代码。而第4 句竟然往这片存储区里写入一个数据!这是严重的错误。所以在使用指针时,程序员心里必须非常清楚:我的指针究竟指向了哪里。在用指针访问数组的时候,也要注意不要超出数组的低端和高端界限,否则也会造成类似的错误。

在指针的强制类型转换:ptr1=(TYPE *)ptr2 中,如果sizeof(ptr2的类型)大于sizeof(ptr1 的类型),那么在使用指针ptr1 来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2 的类型) 小于sizeof(ptr1 的类型),那么在使用指针ptr1 来访问ptr2 所指向的存储区时是不安全的。至于为什么,读者结合例十八来想一想,应该会明白的。

经过一个系列的对指针的学习,现在你是否已经觉得指针再也不是你所想的那么害怕了,如果你的回答是:对,我不怕了!哈哈,恭喜你,你已经掌握C 语言的精华了,C中唯一的难点就是指针,指针搞定其它小菜而已,重要的是实践,好吧,让我们先暂停C 的旅程吧,开始我们的C++编程,C 是对底层操作非常方便的语言,但开发大型程序本人觉得还是没有C++方便,至少维护方面不太好做。而且C++是面向对象的语言,现在基本已经是面向对象的天下了,所以建议学C++。C++是一门难学易用的语言,要真正掌握C++可不是那么容易的,将基本的学完后,就学数据结构吧,算法才是永恒的,程序设计语言层出不穷,永远学不完。学完之后就认真啃下STL 这根骨头吧,推荐书籍--------范型编程与STL 和STL 源码剖析。如果你达到了这样要求,再一次恭喜你,你已经是个程序高手了,甚至可以说是个算法高手,因为STL 里有大量的精华而高效的算法。让我们一起用我们的语言来谱写我们的人生吧!!!


分享到:
评论

相关推荐

    让你不再害怕指针

    “让你不再害怕指针”这个主题旨在帮助初学者克服对指针的恐惧,通过理解指针的类型、所指向的类型、值以及指针在内存和函数调用中的作用,可以更好地掌握C/C++编程。虽然复杂的指针类型在实际编程中较少使用,但...

    让你不再害怕指针(PDF)

    《让你不再害怕指针》是一本专为初学者设计的编程书籍,主要针对C/C++语言中的指针概念进行深入浅出的讲解。在IT领域,指针是C/C++等编程语言的核心部分,理解并熟练掌握指针的使用对于提升编程技能至关重要。这本书...

    C语言指针详解--让你不再害怕指针

    在C语言中,指针是编程中的一个核心概念,它为程序员提供了直接访问内存地址的能力,使得高效且灵活的编程成为可能。...阅读《让你不再害怕指针.pdf》这样的资料将有助于深化理解,解决实际编程中的问题。

    让你不再害怕指针.rar

    "让你不再害怕指针"这个资源显然旨在帮助初学者理解并掌握这一关键概念。指针是C/C++中一个高级且强大的工具,但它也因为其复杂性和易错性而常常让人望而生畏。现在,我们就来深入探讨一下指针的基本概念、用途以及...

    rnbzhpzz让你不再害怕指针

    "rnbzhpzz让你不再害怕指针"这个资源显然旨在帮助初级和中级C语言编程者克服对指针的恐惧,提供了一个详细而通俗易懂的指针使用指南。 1. **指针基础**: - 指针是一个变量,它存储的是另一个变量的地址,也就是说...

    让你不再害怕指针 C语言

    本资源"让你不再害怕指针 C语言"旨在帮助学习者从基础到深入地理解并掌握指针的使用。 首先,我们要理解什么是指针。在C语言中,指针是一个变量,它存储的是另一个变量的内存地址。这意味着通过指针,我们可以直接...

    让你不在害怕指针

    指针是C语言乃至许多...只有深入理解指针的各个方面,才能在编程中熟练运用指针解决问题,写出高效且安全的代码。通过逐步分析复杂指针类型并细心编写代码,可以克服对指针的恐惧,将指针的灵活性转化为程序的力量。

    关于指针让你不再害怕指针

    指针是C++编程语言中的一个核心概念,也是许多初学者感到困惑的地方。它是一种特殊的数据类型,可以...文档“让你不再害怕指针.doc”应该提供了更多关于指针的详细解释和实例,帮助你进一步理解和运用这一关键概念。

    C语言 你不再害怕指针

    在C语言中,指针是编程的...提供的"让你不再害怕指针.pdf"文件应包含更多详细信息和示例,进一步巩固这些概念。同时,不要忘记通过实际编写代码来加深理解,因为实践是最好的老师。祝你在C语言的学习旅程中取得成功!

    不再害怕指针

    指针是C语言中的重要概念,它是存储内存地址的变量,也是连接内存和程序的桥梁。在C语言中,指针具有不同的类型和用法,理解它们对掌握C语言...通过不断练习和应用,指针将不再令人畏惧,反而成为解决问题的强大工具。

    C_C++指针经验总结 (完全的经验之谈,让你不再害怕指针)

    在C和C++编程语言中,指针是一个至关重要的概念,它允许我们直接操作内存,提供了高效的数据处理和灵活的程序设计能力。本经验总结将深入探讨指针的...不断实践和总结,你将不再对指针感到害怕,而是视其为编程的利器。

    彻底搞定c指针,让你不再害怕C指针

    8. **指针安全** - 野指针:未初始化或已被释放的指针,使用时可能导致程序崩溃。 - 内存越界:访问超出分配内存范围的地址,也是常见的程序错误。 - 作用域问题:局部变量的指针在函数返回后无效,除非使用静态...

Global site tag (gtag.js) - Google Analytics