您的位置:首页 > 职场人生

关于指针的若干问题

2013-05-16 19:24 295 查看
最近面试总是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.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 C 面试