C语言值传递问题

 大一开始学的C语言,大三复习了一遍,现在又复习了一遍才弄懂值传递问题

指针传递

demo1

void swap(int a ,int b ){
int temp;
temp=a;
a=b;
b=temp;
}
demo2
void swap(int *a,int *b){
int *temp;
temp=a;
a=b;
b=temp;
}

demo1和demo2两者实现的原理都是一样的,都是单向的值传递,形参的改变并不会影响到实参的改变。

demo3

void swap(int *a,int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}

demo3实现的并不是简单地将实参直接传入,而是将实参传入函数时,将a所指向的变量的值变为b所指向的变量的值,同理,b所指向的值变为a所指向的值。

改变不是a或者b的地址,而是将a或b地址所指向的数据进行交换。



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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值