关于指针的若干问题

最近面试总是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.....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值