指针与函数

昨晚睡前突发奇想,就拿了指和笔,画了一堆乱七八糟的格子,

画风大致如下


以上图是如下代码的内存模拟图

void change(int **a, int **b);
int main()
{
	int a = 1;
	int b = 2;
	int *pta = &a;
	int **ptaa = &pta;
	int *ptb = &b;
	int **ptbb = &ptb;
	printf("address a:%p address b:%p\n",&a,&b);
	change(ptaa,ptbb);
	printf("address pta:%p address ptb:%p\n",pta,ptb); 
	printf("value a:%d value b:%d\n",a,b);
	return 0;
}
void change(int **a, int **b)
{
	int temp1;
	int  *temp = *a;
	*a = *b;
	*b = temp;
	temp1 = **a;
	**a = **b;
	**b = temp1;
}
如上所示,代码的意图是使用change函数把主函数中的a,b值对换,

在非主函数中,如果不使用指针,是无法对主函数变量进行改变的,

其实这个问题用一级指针解决很快很简单就可以解决

为了加深对指针的理解,所以写了一个二级指针.

通过内存模拟图和代码,可以看出,指针变量pta存储的是变量a的地址,

指针变量ptb存储的是变量b的地址,指向指针的指针变量ptaa存储的是指针变量pta,

指向指针的指针变量ptbb存储的是指针变量ptb的地址.

好了下面来分析一下如何把主函数中a,b的值互换.

首先,我们需要给change函数传过去两个二级指针的值.

在change函数中,我们创建了一个两个临时变量,一个临时指针变量temp,一个临时变量temp1;

分别用于更改两个一级指针中的地址和更改地址对应的值.

下面是图解分析

change函数中首次更改的是pta和ptb中存储的地址,

对二级指针解引用,得到了pta和ptb中存储的地址,然后交换.

交换后的内存模拟图如下

然后,现在要改a,b中的值,则是一样的,对一级指针再次解引用,

再交换它的值.


到此,函数运行完毕.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值