C語言基礎 -41 函數_值傳參與地址傳參

值傳遞

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章