#include<stdio.h> void add1(float a,float b) { printf("函数中&a=%p,&b=%p\n",&a,&b); a += (float)10; b += (float)10; printf("函数中a=%f,b=%f\n", a, b); } int main() { float a = 1.1, b = 2.2; printf("调用add1()函数前&a=%p,&b=%p\n",&a,&b); add1(a,b); printf("调用add1()函数后&a=%p,&b=%p\n",&a,&b); printf("a=%f,b=%f\n",a,b); return 0; };该程序中,为什么在执行完函数add1后,a,b的值不变
时间: 2024-03-28 13:37:44 浏览: 82
在这个程序中,`add1`函数中的参数`a`和`b`是通过值传递的方式传入的,也就是说,当`add1`函数被调用时,会将`main`函数中的`a`和`b`的值复制到`add1`函数的局部变量`a`和`b`中。因此,`add1`函数中的操作只会修改`a`和`b`的副本,而不会修改`main`函数中的`a`和`b`变量的值。
在`add1`函数中,我们使用`&`运算符获取了`a`和`b`的地址,并对它们进行了加上10的操作。但是这些操作只是修改了`add1`函数中的局部变量`a`和`b`,而不会影响`main`函数中的`a`和`b`变量的值。
因此,当`add1`函数执行完毕后,`main`函数中的`a`和`b`的值并没有发生改变,仍然是原来的值。
相关问题
#include <stdio.h> main() { fun(); } fun(float a, float b) { float t; scanf("%f%f", &a, &b); if (a < b) { t = a; a = b; b = t; } printf("%5.2,%5.2f\n", &a, &b);
这段代码存在一些问题:
1. 函数 `fun` 没有声明,应该先声明后使用。
2. 函数 `fun` 参数列表中定义了 `a` 和 `b`,但是在函数体内又从控制台输入覆盖了这两个变量的值,因此函数参数定义没有实际意义。
3. `printf` 函数的参数中,`%5.2` 应该是格式化输出的占位符,不应该加上 `&` 符号。
修改后的代码如下:
```c
#include <stdio.h>
void fun(float a, float b);
int main() {
float x, y;
fun(x, y);
return 0;
}
void fun(float a, float b) {
float t;
scanf("%f%f", &a, &b);
if (a < b) {
t = a;
a = b;
b = t;
}
printf("%5.2f,%5.2f\n", a, b);
}
```
这样修改后,程序就可以正确编译和执行了。
阅读全文