C语言值传递、地址传递

值传递地址传递的区别是,值传递只有形参发生改变,实参没变。址传递实参变了

实参(实际参数):给出参数具体的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

形参(形式参数):没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。

传递(参数):函数被调用时,实参的数据赋给形参的过程,执行函数的具体功能,现以交换a=3,b=8这两个数值的程序为例。

//关于值传递和地址传递的学习,以交换函数为例

#include<stdio.h>
void swap1(int x, int y);
void swap2(int *m, int *n);

int main()
{
	int a = 3, b = 8;
	printf("调用函数前:实参a=%d 实参b=%d\n\n", a, b);
	swap1(a, b);
	printf("值传递调用函数后:实参a=%d 实参b=%d\n\n", a, b);
	swap2(&a, &b);
	printf("址传递调用函数后:实参a=%d 实参b=%d\n", a, b);
	return 0;
}

void swap1(int x, int y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
	printf("值传递调用函数中:形参x=%d 形参y=%d\n", x, y);
} 

void swap2(int *m, int *n)
{
	int temp=*m;
	*m = *n;
	*n = temp;
	printf("址传递调用函数中:形参m=%d 形参n=%d\n", *m, *n);
}

得出的结果如下

由此可见值传递只有形参发生改变,实参并没有改变。址传递中实参形参都发生了改变。

究其原因,是值传递实参形参在不同内存中,传递是单向的,即实参只能传递给形参,而形参传不回来给实参了。

地址传递实参把变量的地址给了形参,实参和形参在同一内存中。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中的值传递地址传递是指在函数调用时传递参数的两种方式,值传递是将参数的值复制一份传递给函数,而地址传递是将参数的内存地址传递给函数。下面是两个习题来帮助理解值传递地址传递的概念。 习题一:值传递 ```c #include <stdio.h> void changeValue(int x) { x = 10; } int main() { int num = 5; printf("调用changeValue之前,num的值为:%d\n", num); changeValue(num); printf("调用changeValue之后,num的值为:%d\n", num); return 0; } ``` 在这个例子中,我们定义了一个函数changeValue,它接收一个整型参数x并将其值设为10。在main函数中,我们定义了一个整型变量num并给它赋值为5,然后打印出num的值。接着调用changeValue函数,并再次打印出num的值。运行程序后会发现,调用changeValue函数之后,num的值并没有改变,这就是因为在值传递中,参数的值是被复制一份传递给函数的,函数内对参数的修改不会影响原始变量的值。 习题二:地址传递 ```c #include <stdio.h> void changeValue(int *x) { *x = 10; } int main() { int num = 5; printf("调用changeValue之前,num的值为:%d\n", num); changeValue(&num); printf("调用changeValue之后,num的值为:%d\n", num); return 0; } ``` 在这个例子中,我们定义了一个函数changeValue,它接收一个整型指针参数x并将其指向的值设为10。在main函数中,我们定义了一个整型变量num并给它赋值为5,然后打印出num的值。接着调用changeValue函数,并再次打印出num的值。运行程序后会发现,调用changeValue函数之后,num的值被改为了10,这是因为使用地址传递时,函数内对参数的修改会影响原始变量的值。 通过以上两个习题,我们可以更好地理解C语言中的值传递地址传递的区别和作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xx_Wang123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值