值傳遞
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函數完成的是指針指向的改變