看下面的例子:
例十八:
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语言版,值得一看。。
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
大家好,我是这本书的原创作者,最早一版本的电子书排版不是特别好看,我现在已经重新排版 让你不再害怕指针
让你不再害怕指针.pdf让你不再害怕指针.pdf
C语言指针详解--让你不再害怕指针,主要解答了C语言初学者对使用指针的疑问。
让你不再害怕指针 很好的一本书……
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针,pdf格式,非常好的资源~~!!
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针让你不再害怕指针
让你不再害怕指针让你不再害怕指针让你不再害怕指针
深入理解指针,很详细,如有错误请高手指点 PDF文件格式下载:http://download.csdn.net/source/454542
让你不再害怕指针让你不再害怕指针让你不再害怕指针
很经典的一个介绍指针的文章,不再害怕C指针!
本书系统讲解了指针的用法,帮助大家更好的理解指针。让大家学会灵活的使用指针解决问题。