关于指针的若干问题
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;
};
第二个就是面试宝典上看到的一个我还是没有弄懂怎么回事,为什么s.p[0]是指向内存地址为1的地方呢?继续思考ing.....
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/C++中二维数组、指针的引用等若干问题的总结
- 关于子函数修改父函数值的问题(使用指针)
- Csdn Blog 开发团队致广大网友的一封信-“关于评论数不更新等若干问题的说明”
- 关于Django的TIME_ZONE时区问题的若干总结
- 关于基类指针的问题
- 关于阿里云ecs配置https访问的若干问题
- 关于c++指针大小的问题
- 关于野指针的一些问题与总结
- 关于二维数组首地址赋予指针的问题
- 关于android联网的若干问题
- 关于一个指针取值的问题
- 转:关于指针和内存的几个问题
- 关于百度快照问题的若干说明
- 关于c++ 智能指针及 循环引用的问题
- 关于经过若干指定节点最短路径问题的算法。
- Android起步 - 关于Eclipse的若干问题
- 关于c语言中返回值和返回指针的问题。
- 最高人民法院关于审理劳动争议案件适用法律若干问题的解释(二)
- 关于取地址运算符&以及指针的问题
- 关于指针和const限定符问题的一个简单判断方法