参数传递的两种方式
1.传值方式(函数修改的是副本的值,实参的值不变)
#include <stdio.h>
void swap(float m, float n)
{
float temp;
temp = m;
m = n;
n = temp;
}
void main()
{
float a=1.0, b=2.0;
swap(a, b);
printf("%f, %f", a, b);
}
2.传地址
- 指针变量做参数(形参变化,实参也变化)
#include <stdio.h>
void swap(float* m, float* n) {
float t;
t = *m;
*m = *n;
*n = t;
}
void main() {
float a=1.0, b=2.0, * p1, * p2;
p1 = &a; p2 = &b;
swap(p1, p2);
printf("%f,%f", a, b);
}
假如swap函数的定义如下:
viod swap(float *m,float *n){
float *t;
t = m;
m = n;
n = t;
}
那么形参的变化不影响实参,因为交换的是m,n所指的地址,并没有交换他们所指的值。
- 数组名作参数(形参数组改变,实参数组也改变)
#include <stdio.h>
void sub(int b[]) {
b[1] = 9;
}
void main(void) {
int a[] = { 0,1,2,3 };
printf("%d\n", a[1]);
sub(a);
printf("%d\n",a[1]);
}