hi man

博客园 首页 新随笔 联系 订阅 管理

今天下班回来,在CBLOG闲逛。看到一道关于指针的面试题,刚开始看着有点绕。如下:

#include <stdio.h>
  
struct S {
    int i;
    int *p;
};
  
int main() {    
    S s;
    int *p = &s.i;
    p[0] = 4;
    p[1] = 3;
    s.p = p;
    s.p[1] = 1;
    s.p[0] = 2;
    return 0;
}

出错的原因是,对未作声明的地址赋值程序会崩溃。平时在工作中估计没有人会这样用的,可能就是考基本功吧。

总结:

	1> int * p = (int *)3;  // 使 p 指向 3 (未声明地址)
	2> cout << p << endl;   // OK, 可以输出, 结果为: 0x00000003 
	3> cout << *p << endl;  // ERROR, 不可以对 *p 里的值 (未知的值) 访问
	4> *p = 10;        // ERROR, 不可以对未声明地址赋值  
        5> 资源归属不清的情况导致程序运行出错(如: c++中的深拷贝)  
   
            
posted on 2011-06-01 00:49  KuPig  阅读(261)  评论(0编辑  收藏  举报