今天下班回来,在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++中的深拷贝)