指针~随笔

指针有两个方面,它的值和它的类型,它的值表示的是某个指向的位置,而它的类型表示那个位置上所存储的的对象类型。
int x = 3;
int *p = &x;
cout << p << '\n'//这里输出的是x的地址
<< *p << '\n'
<< &x << '\n'
<< &p << endl;//这里输出的是p的地址
p = new int[3];
p[1] = 3;
cout << p << endl;//这个时候,p已经重新指向开辟的空间

一个一个的分析
int main()
{
int x = 3;
int *p = &x;
cout << p << '\n'
<< *p << '\n'
<< &x << '\n'
<< &p << endl;
GetMemory(p, 4);
p[2] = 3;
cout << p << endl;
cout << &p << endl;
return 0;
}


1---------
void GetMemory(int *p, int size)
{
cout << p << endl;
p = new int[size];
return;
}


解析:
1.在调用函数之前,x有一个地址,p指向x的地址,而且,p自身也有一个地址。
2.调用函数之中,在开辟空间之前,p自身的地址已经改变了,但是指向的地址却没有改变,在开辟空间之后,p自身的地址还是不变(相对于在函数之内),p指向的地址也发生了改变。(所以这里更变*p的值,那么x的应该也随着改变)----证明猜测是正确的
3.在函数调用之后,指针回归到函数调用之前的样子。




2,-------------------
void GetMemory(int *&p, int size)
{
//调用函数前
cout << '\n' << "开辟空间前" << endl;
cout << p << endl;
cout << &p << endl;
*p = 4;
p = new int[size];
cout << "开辟空间之后" << endl;
cout << p << endl;
cout << &p << endl;
return;
}
因为,p在调用函数函数之后,p自身的地址已经发生了改变,所以,这里使用引用,强制性的让p的地址不发生改变,那么会发生什么呢?


1.在调用函数之前,x有一个地址,p指向x的地址,而且,p自身也有一个地址
2.调用函数之中,在开辟空间之前,p自身的地址不发生改变,指向的地址空间也不发生改变,在开辟空间之后,p的自身地址还是保持不变,但是p指向的地址已经发生了改变了。(那么这个时候,改变函数的时候,那么值也应该会发生改变)。
3.调用函数之后,p自身的地址还是不变,p指向的地址空间已经发生了改变。
结论:指向的二意性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值