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