指针的指针的用途

原文:https://blog.csdn.net/fengfeng0328/article/details/83515818

函数传参的本质还是值传递,
如果需要改变 “指针的指向”(或者说指针变量),需要以 “指针的指针” 方式传递参数,而不能试图传递一个 “指针变量” 来改变指针的值

因为传递 “指针变量” 只是相对与在函数里面创建一个新的指针指向同一个地址,“指针变量” 也是一个变量,只不过其变量值是一个地址值而已。终究是因为函数传参的本质还是值传递

下面我们来看一个使用函数调用来交换两个数值的例子:

#include <stdio.h>

/* 改变两变量内存地址上的值来交换两个变量值 */
void swap1(int *p1, int *p2)
{

	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;
}

/* 意图改变指针的指向来交换两个变量值,错误 */
void swap2(int *p1, int *p2)
{
	int *temp=NULL;
	temp=p1;
	p1=p2;
	p2=temp;
}

/* 意图改变指针变量的值来交换两个指针所指向的空间,仅仅是交换了指针指向,变量的值仍然保持不变 */
void swap3(int **p1, int **p2)
{
	int *temp=NULL;
	temp=*p1;
	*p1=*p2;
	*p2=temp;
}

int main(void)
{
	int a=1;
	int b=2;
	int *pa=&a;
	int *pb=&b;

	/* 成功交换两个变量值 */
	swap1(pa, pb);
	printf("a=%d,b=%d\n",a,b); // a=2,b=1
	
	/* 不能交换两个变量值*/
	swap2(pa, pb);
	printf("a=%d,b=%d\n",a,b); // a=1,b=2 函数传参的本质是值传递,只是两个新指针指向交换而已,并不会影响旧的指针
	printf("*pa=%d,*pb=%d\n",*pa,*pb); // *pa=1,*pb=2 旧指针指向不会改变
	
	/* 不能交换两个变量值,但能交换指针所指向内存的值 */
	swap3(&pa, &pb);
	printf("a=%d,b=%d\n",a,b); // a=1,b=2 变量值保持
	printf("*pa=%d,*pb=%d\n",*pa,*pb); // *pa=2,*pb=1 指针指向交换
	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值