1、有参函数需要虚实结合
2、形参不占内存,实参占内存 (值在栈空间中,引用在堆空间中)
3、如果在函数调用时是值传递如 c = max(a,b) a,b是一个值,值传递是单向传递,形参的改变不影响实参的改变
4、如果 c = max(&a,&b),则会影响a,b的值
如果 c = max(&a,b) ,则会影响a的值
如果 c = max(a,&b) ,则会影响b的值
例子:
分析:
实参:a,b 形参:x,y
由于是值传递:x,y无论数值如何改变,都不会影响a,b的数值
空间上:a,b,x,y都开辟了自己的空间存储值和地址的值
int add(int a,int b){...}只会对返回值z产生影响,不会对a,b产生影响
- #include "stdio.h"
- #include "windows.h"
- #include "stdlib.h"
-
- //值传递
- int z;
- int main() {
- int a = 5;
- int b = 6;
-
- z = a - b;
- printf("z的值:%d\n", z);//打印z的值
- void swap(int x, int y);
- void printvalue(int i, int j);
- //没有交换a,b的值 a,b的值的作用域在main里 没有在swap中
- swap(a,b);
- printvalue(a, b);
- z = a - b;
- printf("main里z的值:%d\n", z);//打印main里z的值
- return 0;
- }
-
- //针对a,b值互换进行操作
- void swap(int x, int y) {
- int temp;
- temp = x;
- x = y;
- y = temp;
- z = x - y;
- printf("swap里z的值:%d\n", z);//打印swap里z的值
- }
-
- void printvalue(int i, int j) {
- printf("a=%d,b=%d\n", i, j);
-
- }
- //
- //z的值: - 1
- //swap里z的值:1
- //a = 5, b = 6
- //main里z的值: - 1
- //
- //从打印的结果显示,a,b传递进去后进行值交换只在swap(x,y)中起作用,回到main里a和b的值并没有改变
//
//z的值: - 1
//swap里z的值:1
//a = 5, b = 6
//main里z的值: - 1
//
//从打印的结果显示,a,b传递进去后进行值交换只在swap(x,y)中起作用,回到main里a和b的值并没有改变
- #include "stdio.h"
- #include "windows.h"
- #include "stdlib.h"
-
- //值传递
- int z;
- int main() {
- int a = 5;
- int b = 6;
-
- z = a - b;
- printf("z的值:%d\n", z);//*q取的是z的值
- void swap(int x, int y);
- void printvalue(int i, int j);
- //没有交换a,b的值 由地址指针指向不同的值 导致在输出时发现值是交换的
- swap(a,b);
- printvalue(a, b);
- z = a - b;
- printf("main里z的值:%d\n", z);//*q取的是z的值
- return 0;
- }
-
- //针对地址的指针进行操作
- void swap(int x, int y) {
- int temp;
- temp = x;
- x = y;
- y = temp;
- z = x - y;
- printf("swap里z的值:%d\n", z);//*q取的是z的值
- }
-
- void printvalue(int i, int j) {
- printf("a=%d,b=%d\n", i, j);
-
- }
- //
- //z的值: - 1
- //swap里z的值:1
- //a = 5, b = 6
- //main里z的值: - 1
- //
- //从打印的结果显示,a,b传递进去后进行值交换只在swap(x,y)中起作用,回到main里a和b的值并没有改变