天天看点

初级函数及实例(day8)

本次将通过两个实例来学习函数。

1.传值函数

要求:写一个比较两个整型大小的函数

实例

​int get_max(int x, int y)

{
  if (x > y)
  
  return x;
  
  else
  
  return y;
}


int main()

{

  int a, b = 0;

  scanf("%d%d", &a, &b);

  int max = get_max(a, b);

  printf("最大值为%d", max);

  return 0;

}      

首先介绍一下函数执行顺序:

函数是一个独立的代码块,在主函数内调用时以语句形式执行,(可进入函数代码块进行监视,通过型参和实参的储存地址及储存内容的不同加深理解),该代码块只在主函数调用时执行。

型参:型参在内存的储存地址为独立生成的,与实参无关,而且是临时的,执行完该函数后型参便会销毁。

实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,实参必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

实参传递给型参值的过程仅仅是将实参的值传递给型参的过程,因为型参是确定的值,所以在内存中有相应的地址储存该值,本质上说就是型参地址里存储的内容转移到实参地址内,函数代码块随后通过该内容执行下一步,然后将型参的存储地址及内容销毁等待下一次调用。

在实例中,我们设置了一个get_max的函数,其结构为

函数名:get_max(实参1,实参2),该函数会返回一个最大值,所以我们在主函数外声明该get_max函数。

当调用该函数时,(型参1,型参2)的储存地址内会接收到实参传递的数值,随后对两个参数内储存的值进行比较,型参1的值>型参2的值时,返回型参1的值,反之则返回2的值。返回的值与实参的值类型保持一致,故设定为int型。

设置一个整型的max变量接收该返回值(即最大值)并打印。程序结束。

整个过程中,实参和型参只传递了值,故为传值函数。

2.传址函数

要求:写一个可以交换两变量值的函数。

实例

​void  exc(int* pa, int* pb)

{

    int tem = 0;

    tem = *pa;

    *pa = *pb;

    *pb = tem;

}

int main()

{

    int a, b;

    printf("请输入a,b\n");

    scanf("%d%d", &a, &b);

    printf("a = %d,b = %d\n", a, b);

    int* pa = &a;

    int* pb = &b;//创建指针

    exc(&a, &b);

    printf("a = %d,b = %d\n", a, b);

    return 0;

}      

思路:我们设置一个exc(a,b)的函数,不需要返回值,当输入实参1,实参2的变量名后,其值会互换。

这里如果我们直接操作型参的话,a->型参1,b->型参2,随后设置一个中间变量tem,代码如下:

void exc(int x, int y)

{

  int tem;

  tem = x;

  x = y;

  y = tem;

}      

最终,执行完该函数后,x,y都会销毁,a和b存储的值完全没变。

所以我们考虑用指针变量,将型参1,型参2直接指向实参1,实参2的储存地址,让函数直接通过地址修改实参1和实参2里面的值。

其步骤如下:

1)创建储存实参值的a,b的指针变量pa,pb;