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函数完成的是指针指向的改变

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/106914743