指针常见错误

作者在 2011-09-02 16:33:19 发布以下内容
常见错误1
# include <stdio.h>

int main (void)
{
    int * p;
    int i = 3;

    *p = i;      //这样写是错的,前面定义了两个变量,p和i。这条语句把i赋值给了以p变量里内容为地址的另一个变量
                
//p变量里的内容没定义,是个垃圾值,那么以这个垃圾值为地址的变量是什么并不确定
                
//这时候的赋值,指不定会把那里给篡改了,尽管编译时可能不报错或者不警告,但执行起来可能会出问题
    
    printf("%d\n",*p);

    return 0;
}
 
常见错误2
# include <stdio.h>

int main (void)
{
    int i = 3;
    int * p;
    int * q;
    
    p = &i;
    
    //*q = p;        //这么写是错误的,*p是int型,q是int *型的,语法有错误:error C2440: '=' : cannot convert from 'int *' to 'int'

    
//*q = *p;        //这么写也是错误的,原因类似于常见问题1里讲的。这里q变量没定义初值,里面存的是垃圾值,*q表示以这个垃圾值为地址的某个变量
                    
//往这个变量中赋值,会引起系统潜在的风险,所以执行时会被系统强行关闭

    
//p = q;        //这么写,本条语句语法上没错误,但因为q没赋初值,所以里面存的是个垃圾值,那么*q是指不定在那的一个空间的变量
                    
//但下一语句,需要读出这个不确定的变量的值,这对系统安全是危险的,不被允许
                    /*也就是说,q的空间属于本程序,所以本程序可以读写q的内容
                    但这时候q内部是垃圾值,则本程序不能读写*q的内容
                    因为此时*q所代表的内存单元的控制权并没有分配给本程序,既不能写,也不能读
                    运行时,系统会强行关闭
                    
*/
    
    q = p;            //这样写,才OK,此时把p变量的内容赋值给了q, 已经知道p变量中的内容是i的地址
                    
//那么q变量里的内容也就变成了i变量的地址
                    
//*q是以q变量里内容为地址的变量,也就是以i的地址为地址的变量,也就是i,所以最后输出的*q的值是3

    printf("%d\n",*q);

    return 0;
}
郝斌视频笔记 | 阅读 1022 次
文章评论,共6条
laznrbfe
2011-09-03 23:05
1
<img src="image/face/28.gif" class="face">写得很详细。赞一个。
yangli0314
2011-09-07 19:36
2
恩,写代码就是要注意细节,赞一个
iwonply
2011-09-11 17:57
3
不错,不错。。。
华文
2011-09-12 12:36
4
很普遍的错误,顶一个............<img src="image/face/3.gif" class="face">
edwardflee(作者)
2011-09-12 16:43
5
<div class="quote"><span class="q"><b>华文</b>: 很普遍的错误,顶一个............<img src="image/face/3.gif" class="face"></span></div><img src="image/face/22.gif" class="face">
招风01
2011-09-27 15:59
6
常见错误1中:“p=&amp;i”!
游客请输入验证码
最新评论