值传递
book@100ask:~/C_coding/CH01$ cat swap.c
#include <stdio.h>
#include <stdlib.h>
int print_value(int a,int b)
{
printf("%d %d\n",a,b);
return 0;
}
int main()
{
int i = 3,j = 5;
print_value(i,j);
return 0;
}
book@100ask:~/C_coding/CH01$ make swap
cc swap.c -o swap
book@100ask:~/C_coding/CH01$ ./swap
3 5
book@100ask:~/C_coding/CH01$ cat swaap1.c
#include <stdio.h>
#include <stdlib.h>
void swap(int i,int j)
{
int tmp;
tmp = i;
i = j;
j = tmp;
}
int main()
{
int i = 3,j = 5;
int tmp;
swap(i,j); //main函数在调用了swap,但发现值并没有并交换;此时,值传递,对main函数中无影响。
printf("i = %d,j = %d\n",i,j);
}
book@100ask:~/C_coding/CH01$ make swaap1
cc swaap1.c -o swaap1
book@100ask:~/C_coding/CH01$ ./swaap1
i = 3,j = 5
main函数里面的两个值,i=3,j=5
swap函数里面的形参值交换,不会影响到main函数;需要引入间接引用/指针传参
地址传递
book@100ask:~/C_coding/CH01$ cat swap1.c
#include <stdio.h>
#include <stdlib.h>
void swap(int *p,int *q)
{
int tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
int main()
{
int i = 3,j = 5;
int tmp;
swap(&i,&j);
printf("i = %d,j = %d\n",i,j);
}
book@100ask:~/C_coding/CH01$ make swap1
cc swap1.c -o swap1
book@100ask:~/C_coding/CH01$ ./swap1
i = 5,j = 3
tmp是值常量
用地址引用的方式,间接改变main函数里面的值。
*p存的是i的地址,间接指向i
*q存的是j的地址,间接指向j
swap函数完成的是指针指向的改变