您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  C语言笔记第九章指针的安全问题 【注册男护士专用博客】          

C语言笔记第九章指针的安全问题

www.nanhushi.com     佚名   不详 

  第九章 指针的安全问题 
看下面的例子: 
例十七: 
char s=’a’; 
int *ptr; 
ptr=(int*)&s; 
*ptr=1298; 
指针ptr是一个int*类型的指针,它指向的类型是int。它指向的地址就是s的 
首地址。在32位程序中,s占一个字节,int类型占四个字节。最后一条语句不但 
改变了s所占的一个字节,还把和s相临的高地址方向的三个字节也改变了。这三 
个字节是干什么的?只有编译程序知道,而写程序的人是不太可能知道的。也许 
这三个字节里存储了非常重要的数据,也许这三个字节里正好是程序的一条代码 
,而由于你对指针的马虎应用,这三个字节的值被改变了!这会造成崩溃性的错 
误。 
让我们再来看一例: 
例十八: 
1。 char a; 
2。 int *ptr=&a; 
... 
... 
3。 ptr++; 
4。 *ptr=115; 
该例子完全可以通过编译,并能执行。但是看到没有?第3句对指针ptr进行 
自加1运算后,ptr指向了和整形变量a相邻的高地址方向的一块存储区。这块存储 
区里是什么?我们不知道。有可能它是一个非常重要的数据,甚至可能是一条代 
码。而第4句竟然往这片存储区里写入一个数据!这是严重的错误。所以在使用指 
针时,程序员心里必须非常清楚:我的指针究竟指向了哪里。 
在用指针访问数组的时候,也要注意不要超出数组的低端和高端界限,否则 
也会造成类似的错误。 
在指针的强制类型转换:ptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类型)大 
于sizeof(ptr1的类型),那么在使用指针ptr1来访问ptr2所指向的存储区时是安 
全的。如果sizeof(ptr2的类型)小于sizeof(ptr1的类型),那么在使用指针ptr1 
来访问ptr2所指向的存储区时是不安全的。至于为什么,读者结合例十七来想一 
想,应该会明白的。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目