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的值并没有改变