最近面试总是C啊。。。
eg1:
int *f1(void)
{
int x;
x = 10;
cout<<"x="<<x<<" &x="<<&x<<endl;
return(&x);
}
int *f2(void)
{
int *p;
*p = 10;//used without intialized
cout<<"*p="<<*p<<" p="<<p<<endl;
return p;
}
int *f3(void)
{
int *ptr;
ptr = (int*)malloc(sizeof(int));
cout<<"ptr = "<<ptr<<endl;
return ptr;
}
问这些指针返回是会有些什么问题?
显然是没有哪个能够正确返回结果的:f1()中x是局部变量,所以在函数结束的时候栈空间已经被释放了,所以访问的是未知的内容;f2()显然在函数中就出错了,*p=10是对没有地址的指针赋值;f3()也不能返回同样的地址段。
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;//写入位置0x00000001时发生冲突
}
第二个就是面试宝典上看到的一个我还是没有弄懂怎么回事,为什么s.p[0]是指向内存地址为1的地方呢?继续思考ing.....