关于指针传递的实验

int main(int argc, char* argv[])
{
	
	int i = 100;
	std::cout<<"调用之前i的值" << i << std::endl;
	std::cout << "调用之前i的地址" << &i << std::endl;
	resnet(&i);
	std::cout << "调用之后i的值" << i << std::endl;
	std::cout << "调用之后i的地址" << &i << std::endl;
	while (1);
}
void resnet(int *p)
{ 
	std::cout << "p的地址" << p<<std::endl;
    std::cout << "p的值" << *p<<std::endl;
	int q = 0;
	std::cout << "定义q=0的值" <<q << std::endl;
	std::cout << "定义q=0的地址" << &q<< std::endl;
	*p = q;
	std::cout << "重新赋值之后p的值" << *p << std::endl;
	std::cout << "重新赋值之后p的地址" << &p << std::endl;
}
调用之前i的值100
调用之前i的地址00000096E6DDFD04
p的地址00000096E6DDFD04
定义q=0的值0
定义q=0的地址00000096E6DDFBE4
重新赋值之后p的值0
重新赋值之后p的地址00000096E6DDFCE0
调用之后i的值0
调用之后i的地址00000096E6DDFD04

1.定义形参为i,在传入函数之前值为100,地址为FD04,

2.将i的地址作为参数传入形参*p,此时拷贝的是i的地址(值传递拷贝的是i的值),将i的地址拷贝过来以后p就是i的地址了即p==FD04,因为现在100就存在FDD4这个地址中,所以输出*p就得到了100.

3.重新定义一个变量q=0,并输出地址,可知q=0,其地址为FCA4。

4.将q的值放在p的地址里,即p还是FD04,但是*p=0,里边放的值变了,此时输出*p=0,p=FD04;但是此时p=FCE0(赋值过程可能有其他操作占用了一段内存)

5.调用函数之后i的值由100变为了0,i的地址没有发生变化,仍然是FD04。

同理:

void resnet(int *p)
{ 
	std::cout << "p的值" << *p << std::endl;
	std::cout << "p的地址" << p<<std::endl;

	int q = 0;
	std::cout << "定义q=0的值" <<q  << std::endl;
	std::cout << "定义q=0的地址" << &q<< std::endl;
	p = &q;
	std::cout << "重新赋值之后p的值" << *p << std::endl;
	std::cout << "重新赋值之后p的地址" << &p << std::endl;
}
调用之前i的值100
调用之前i的地址00000033F478FCF4
p的值100
p的地址00000033F478FCF4
定义q=0的值0
定义q=0的地址00000033F478FBD4
重新赋值之后p的值0
重新赋值之后p的地址00000033F478FCD0
调用之后i的值100
调用之后i的地址00000033F478FCF4

指针传递的是一个变量或者一个值的地址,但是它本身还是采用值传递的方式。即你不能使它指向另外一块地址,但是你可以改变它指向的空间里存的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值