纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

传值与传址交换整数 C语言:传值与传址交换整数

rampant boy   2021-08-06 我要评论
想了解C语言:传值与传址交换整数的相关内容吗,rampant boy在本文为您仔细讲解传值与传址交换整数的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:C语言传值,C语言传址,交换整数,下面大家一起来学习吧。

传值调用

要想交换两个整数的值,我们可以自定义一个函数,来实现这个过程。具体代码如下:

#include <stdio.h>

void Swap1(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}

int main()
{
	int a = 10;
	int b = 20;
	pirntf("交换前:a=%d  b=%d", a, b);
	Swap1(a, b);
	pirntf("交换前:a=%d  b=%d", a, b);
	return 0;
}

按照一般的逻辑,大多数人应该都会这样写出这样的程序。但这个程序是否能达到目的呢》我们可以运行检验一下。

image-20210713102225191

很显然,a,b两个数的值并未发生改变。我们可以通过调试的方法来找出原因。

image-20210713102531340

通过这里我们可以知道,x,y的确接收了a,b的值,但是,a,b,x,y的地址都不相同,也就是说,这四个变量在内存中开辟了四块空间。那么,在Swap函数中,x,y的值的确互换了,但这仅仅是在0x0118fd90和0x0118fd94这两块空间里进行的交换,与a,b无关.

image-20210713102921736

所以,这段代码无法交换两个整数的值。x,y仅仅接收了a,b的值,这个过程也被称为传值调用。

传址调用

通过前面的分析,我们可以知道,要想交换a,b的值,需要在a,b所开辟的两块空间内进行操作。根据我们所学的知识,这时,我们就应该用到指针。因为指针变量可以存放地址。具体代码如下:

#include <stdio.h>

void Swap2(int* pa, int* pb)
{
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;
}

int main()
{
	int a = 10;
	int b = 20;
	printf("交换前:a=%d  b=%d\n", a, b);
	Swap2(&a, &b);
	printf("交换后:a=%d  b=%d\n", a, b);
	return 0;
}

运行结果为:

image-20210713104107093

此时,这段代码就很好的解决了我们的问题。pa,pb用来接收a,b的地址,这个过程称为传址调用。

综上所述,Swap1在被调用的时候,实参传给形参,其实形参是实参的一份临时拷贝,改变形参,不能改变实参。Swap2在被调用的时候,函数和函数外边的变量建立起正真的联系,也就是函数内部可以直接操作函数外部的变量。这也就是传值调用和传址调用的区别。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注的更多内容!


相关文章

猜您喜欢

  • SpringBoot使用Swagger Spring Boot中怎样使用Swagger详解

    想了解Spring Boot中怎样使用Swagger详解的相关内容吗,团子大圆帅在本文为您仔细讲解SpringBoot使用Swagger的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:springboot使用swagger,swagger使用教程,springboot教程,下面大家一起来学习吧。..
  • java搞定汉诺塔 手把手带你用java搞定汉诺塔

    想了解手把手带你用java搞定汉诺塔的相关内容吗,rampant boy在本文为您仔细讲解java搞定汉诺塔的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java汉诺塔,搞定java,下面大家一起来学习吧。..

网友评论

Copyright 2020 www.freefLashonLinegames.com 【木头下载】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式