关于指针传递的实验

博客通过具体示例阐述指针传递和值传递原理。定义形参 i 并传入函数,将 i 地址传入形参 *p,之后重新定义变量 q 并将其值放入 p 地址里,调用函数后 i 值改变但地址不变。指出指针传递虽传地址,但本身是值传递,可改指向空间的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值