C for ios --- 函数

@: 1

函数的定义

本小节知识点:


1.自定义函数的书写格式

  • 用户定义函数:由用户自己写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主程序中需声明,然后才能使用。

    ~~ 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
    ~~ {
    ~~     函数体
    ~~ }
    ~~ 
  • 示例:

    “`
    ~~ int main(){
    ~~ }
    ~~ void test1(){
    ~~ }

“`

2.定义函数的目的

  • 将一个常用的功能封装起来,方便以后调用

3.定义函数的步骤

  • 函数名:函数叫什么名字
  • 函数体:函数是干啥的,里面包含了什么代码
  • 返回值类型: 函数执行完毕返回什么和调用者

4.无参无返回值函数定义

  • 格式

    ~~ void 函数名()
    ~~ {
    ~~     函数体
    ~~ }
  • 示例:

    “`
    ~~ void sayHello()
    ~~ {
    ~~ printf(“lnj hello”);
    ~~ }


- 没有返回值时return可以省略

---
## 5.无参有返回值函数定义
- 格式

~~ ```
~~ 返回值类型 函数名()
~~ {
~~     函数体
~~     return 0;
~~ }
~~ ```

- 示例

~~ ```
~~ int getAge()
~~ {
~~     return 30;
~~ }
~~ ```
---
## 6.有参无返回值函数定义
- 格式

~~ ```
~~ void 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
~~ {
~~     函数体
~~ }
~~ ```
- 示例

~~ ```
~~ void prtLines(int n)
~~ {
~~     for (int i=0; i<n; i++) {
~~         printf("------");
~~     }
~~ }
~~ ```
- 形式参数表列表的格式:类型 变量名,类型 变量2,.......

---
## 7.有参有返回值函数定义
- 格式

~~ ```
~~ 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
~~ {
~~     函数体
~~     return 0;
~~ }
~~ ```
- 示例:

~~ int getMax(int number1, int number2)
~~ {
~~ return number1 > number2 ? number1 : number2;
~~ }
~~

---

## 8.函数定义注意
- 函数不能嵌套定义


# 函数的参数
## 本小节知识点:
1. 【理解】形式参数介绍和使用
2. 【理解】实际参数介绍和使用
3. 【理解】形式参数、实际参数注意点
4. 【理解】返回值类型注意点
5. 【理解】return使用注意
---


## 1.形式参数介绍和使用

- 基本概念
    + 形式参数:在定义函数时,函数名后面的小括号()中定义的变量称为形式参数,简称形参
    + 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。



int max(int number1, int number2) // 形式参数
{
return number1 > number2 ? number1 : number2;
}
“`

2.实际参数介绍和使用

  • 基本概念

    • 实际参数:在调用函数时传入的值称为实际参数,简称实参
    • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

    “`
    int main()
    {
    max(88, 99); // 实际参数
    return 0;
    }


## 3.形式参数、实际参数注意点
- 调用函数时传递的实参个数必须和函数的形参个数必须保持一致

 ```
 int max(int number1, int number2) //  形式参数
{
     return number1 > number2 ? number1 : number2;
}
 int main()
 {
     max(88); // 报错
     return 0;
 }
 ```
- 当使用基本数据类型(charintfloat等)作为实参时,实参和形参之间只是值传递,修改形参的值并不影响到实参函数可以没有形参

 ```
 void change(int number1, int number2) //  形式参数
 {
    number1 = 250; // 不会影响实参
     number2 = 222;
 }
 int main()
 {
     int a = 88;
     int b = 99;
     change(a, b);
     printf("a  = %d, b = %d", a, b);
     return 0;
 }
 输出结果: 88, 99
 ```
- 形参实参类型不一致, 会自动转换为形参类型

 ```
 void change(double number1, double number2) //  形式参数
 {
    printf("number1 = %f, number2 = %f", number1, number2);
 }
int main()
 {
     change(10, 20);
     return 0;
 }
 输出结果: 10.000000, 20.000000
 ```
---

## 4.返回值类型注意点
- 如果没有写返回值类型,默认是int

 ```
 int max(int number1, int number2) //  形式参数
 {
     return number1 > number2 ? number1 : number2;
}

可以写为

 max(int number1, int number2) //  形式参数
 {
     return number1 > number2 ? number1 : number2;
 }
 ```
---


## 5.return使用注意
- 一个函数内部可以多次使用return语句,使用了return语句后,函数就会马上停止执行,return语句后面的代码就不再被执行

 ```
~~ int max(int number1, int number2) //  形式参数
~~ {
~~     return number1 > number2 ? number1 : number2;
~~     printf("执行不到"); // 执行不到
~~     return 250; // 执行不到
~~ }
 ```

- 函数返回值的类型和return实际返回的值类型应保持一致。如果两者不一致,则以返回值类型为准,自动进行类型转换

 ```
~~ float height()
~~ {
~~     return 175;
~~ }
~~ int main()
~~ {
~~     printf("%d", height());
~~ }
~~ 输出结果: 175.000000
 ```

---

# 函数的声明
## 本小节知识点:
1. 【理解】函数的声明

---

## 1.函数的声明
- 在C语言中,函数的定义顺序是有讲究的:默认情况下,只有后面定义的函数才可以调用前面定义过的函数

- 如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那就必须在main函数的前面进行函数的声明,必须在子函数被调用之前,可以写在函数内部也可以写在函数外部。

- c语言中不可以重复定义相同函数,但是可以重复声明相同函数。

- 函数的声明格式:
    + 返回值类型 被调函数名( 类型 形参, 类型 形参... );
    + 返回值类型 被调函数名( 类型, 类型...);

 ```
 例如:
 int max( int a, int b );
 int max( int, int );
  • main函数调用分析
    • main函数时系统规定的名称,系统启动程序就会调用名称叫做main的函数。
      -main函数只能由系统调用,不能手动调用
    • 关于main的形参的解释
    • argc:系统传递传递进来的参数个数
    • argv:系统传递进来的参数实际的值
  • 函数的声明与实现的关系
    (img)

  • 注意点:

    • 如果被调函数的返回值是整型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理
    int main(int argc, const char * argv[])
    {
     printf("result = %d\n", getMin());
    return 0;
    }
    int getMin() // 返回int, 不用声明
    {
     return 10;
    }
    
    int getMax() // 返回不是int, 需要声明
    {
     return 10.10;
    }

” + 当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而 直接调用。


float getMax() // 在调用之前定义
{
return 10.10;
}
int main(int argc, const char * argv[])
{
printf("result = %f\n", getMax());
return 0;
}

@: 4

函数的调用

本小节知识点:

  1. 【理解】函数的调用
  2. 【掌握】函数的嵌套调用

1.函数的调用

  • 函数调用的一般形式为

    • 函数名(实际参数表);
    • 对无参函数调用时则无实际参数表。
    • 实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。
    • 多个参数各实参之间用逗号分隔。
  • 函数表达式

    • 函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数 是有返回值的。

~~
~~ int z=0;
~~ z = max(23, 80) + 1; // 函数表达式
~~

  • 函数语句
    • 函数调用的一般形式加上分号即构成函数语句。

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

  • 函数实参
    • 函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因 此要求该函数必须是有返回值的。

~~
~~ printf("%d\n",max(20, 30));
~~

-

2.函数的嵌套调用

  • C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值