c语言函数传值和传指针

什么是函数?

  • 函数是一个可以重复使用的功能代码块,一个封闭的(空间),它可以在代码里随意调用。利用函数的封装可以减少重复代码的开发,提高代码的利用率,让代码更简洁,更容易理解。
  • 我们还可以还可以把函数理解成一个工厂,函数的参数就相当于工厂里的原材料,函数内部的代码(函数体)相当于工厂的生产线生产出手机,函数参数进行加工得出的结果再用return 返回,返回值就是生产出来的手机。

我们来编写一个实现两数求和的函数:

int add(int a, int b){
    
    
	return a + b;
}
int main()
{
    
    
	int a = 5;
	int b = 7;
	printf("%d\n",add(a, b));
	system("pause");
	return 0;
}

函数的调用

add(a,b)
//是对上述函数的调用
- 函数的调用过程

代码执行到函数调用的位置时,就会进入函数的内部执行,同时对参数进行赋值,按照函数内部顺序从上至下依次执行,直到遇到return语句,函数结束,结束后回到被调用的位置,继续往下执行。

  • 只定义函数的话,函数体内容是不会执行的。
  • 一个函数可以被调用多次,每次调用的时候,可以传递不通用的参数。
  • 函数的形参是实参的一份‘拷贝‘
int add(int a, int b){
    
    
	return a + b;
}
int main()
{
    
    
	int a = 5;
	int b = 7;
	printf("%d\n",add(a, b));---------->
	printf("%d\n", add(2, 9));--------->
	system("pause");
	return 0;
}
//执行结果
12
11
请按任意键继续. . .

传值

== 我们写一个交换a,b值的函数==

void swap(int x, int y)
{
    
    
	int temp = x;
	x = y;
	y = temp;
	
}
int main()
{
    
    
	int a = 10;
	int b = 16;
	swap(a, b);
	printf("a = %d b = %d\n", a, b);
	system("pause");
	return 0;
}

运行结果如下

a = 10 b = 16
请按任意键继续. . .

可以看到,a和b的值最终并没有被交换。开始时a,b的值为10,16,而最终还是同样的值. 这样的原原因是函数内部的访问的x和y不是a和b的额本体 ,

传指针

  • 那么为了解决以上的问题,我们就需要传指针,
void swap(int* a, int* b)
{
    
    
	int temp =*a;
	*a = *b;
	*b = temp;
	
}
int main()
{
    
    
	int a = 10;
	int b = 16;
	swap(&a,&b);
	printf("a = %d b = %d\n",a, b);
	system("pause");
	return 0;
}

运行结果为

a = 16 b = 10
请按任意键继续. . .

可以看到在这种情况下,a和b的值才真正交换了。https://editor.csdn.net/md/?articleId=109286880

猜你喜欢

转载自blog.csdn.net/supermanman_/article/details/109278097
今日推荐