用内存解释为什么指针能修改变量的值

本文通过两个示例对比了C语言中通过数值类型和指针类型传递参数的区别,展示了如何利用指针来实现对原始数据的修改。

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

 

在传参数的过程中,如果是实参是数值类型,形参被改变后的结果是不能被返回,如果是实参是指针类型就可以。解释如下:

 

#include <stdio.h>
void change(int a);
void change1(int *a);
int main()
{
	int a = 10;
	printf("main中的a的地址编号:%p\n",&a);//输出:main中的a的地址编号:0019FF3C (不同的机器输出的值不一样)

	change(a);
	printf("a = %d\n",a);

	change1(&a);
	printf("a = %d\n",a);

	return 0;
}
void change(int a)
{
	printf("change中a的地址编号:%p\n",&a); //输出:change中a的地址编号:0019FEEC
	                                        //说明该变量和在main()中的a是分配在栈上不一样的位置。不占用同一块内存 无法完成修改。
	                                        //change函数中的变量a是在栈上的,用完即消。
	                                      
	a = 100;
}
void change1(int *b)
{
	printf("change1中b的地址编号:%p\n",&b);//change1中b的地址编号:0019FEEC  (和上面change函数没有关系)
	printf("%p\n",b);                       //输出:0019FF3C   (不同的机器输出的值不一样) 
	                                        //和main中a的地址编号相等。

	printf("%d\n",*(int*)0x0019FF3C);       // 将上面得到的地址的内容输出    结果显示:10    也就是说明这块内存中的内容是10;

	*(int*)0x19FF3C = 100;       //将0019FF3C 中的内容修改为100,请注意main中再次输出a的值。a的值被改为100;  而b==0019FF3C 所有有下:

	*b = 100;                               // 将a的值改为100;(以上所有铺垫只为此句做解释。)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值