zoukankan      html  css  js  c++  java
  • iOS学习05C语言函数

    本次主要是学习和理解函数,函数树状图如下:

    1、函数的声明和定义 

      函数定义四要素分别为:
        返回值类型 :函数的结果值类型,函数不能返回数组。 指定返回类型是void类型说明函数没有返回值。

        函数名 :函数名命名规范和变量名命名规范一样。

        参数列表 : 每个形式参数的前面说明其类型,即使几个参数具有相同的数据类型,也必须对每个形式参数分别进行类型说明。形式参数用逗号进行分隔,就算没有参数函数后面的()也不能省略,可以写成(void)。

        函数体 :函数功能的实现。

      返回值类型 函数名(参数类型 参数名,...) {
          功能语句;
          return 返回值;
       }

      返回值

        函数的返回值称为函数的值,只能通过 return语句返回给主调函数。
        一个函数只能有一个返回值。
        函数即使没有返回值也可以使 return来结束函数的执行 ,回到主调函数。

        return后面的语句不再执行。      

    1     void test() {
    2          printf("我在return语句之前");
    3          return;
    4         printf("我在return语句之后");//不执行
    5      } 

      函数声明   

        严格的函数通常包括三部分: 函数声明函数定义、以及函数调用
        函数声明:指的就是函数的描述,也叫函数原型。
    

           函数声明:

          1、函数定义出现在主调函数之前,可以省略函数声明。

          2、函数定义出现在主调函数之后,需要提前声明函数。

        函数声明尽管可以省略,从规范来讲,不要省略。
    1     // 1.函数声明
    2     int maxValue(int, int);
    3     // 2.函数定义
    4     int maxValue(int a, int b) {
    5         return a > b ? a : b;
    6     }

    2、函数分类

      从函数定义上来看,函数可分为:

        库函数(系统提供好的函数,例如printf) 

          printf(“Hello Lanou
    ”);
          scanf(“%d”, &number);
          strlen(string);
          strcpy(string1, sthring2);
         ...

        printf 输出函数, 用于输出一个信息

        scanf 输入函数,用于从键盘输入一个信息

        strlen 求字符串长度函数,用于求指定字符串的长度

        strcpy 字符串拷贝函数,用于实现字符串复制

        ...  

        自定义函数(开发者自己写的函数)

      从函数定义上来看,函数可分为:
        第一种 无参无返回值 
            void sayHello() {
                printf("hello, 约吗?");
            }
        第二种 无返回值 有参   
    1       void printSum(int a, int b) {
    2           int sum = a + b;
    3           printf("sum = %d
    ", sum);
    4       }
        第三种 有返回值,无参
          int randomValue() {
              return arc4random() % 11;
          }
        第四种 有返回值,有参    
    1     int mulValue(int a, int b) {
    2         int mul = a * b;
    3         return mul;
    4     }

    3、函数调用

      函数调用由函数名和跟随其后的实际参数列表组成,其中实际参数列表用(...)括起来。函数调用后边始终跟着分号, 即使没有参数也要加上()。 

        函数名();

      函数的调, 会产生程序的跳转。

         对上面函数的调用  

    1       sayHello();
    2       printSum(2, 3);
    3     
    4       int random = randomValue();
    5       printf("random = %d
    ", random);
    6     
    7       int mul = mulValue(2, 3);
    8       printf("mul = %d
    ", mul); 

    4、形参实参

      形参形式上的参数,函数定义时使用的参数,假名字来表示函数调用时需要提供的值,作用范围为整个函数范围。
      实参函数调用的时候传过去的参数值,
    出现在函数调用中的表达式

      注意函数调用中,形参会拷贝实参内容,传递参数是给函数传送信息的一种方法。

    5、函数嵌套

      C语言不允许函数嵌套定义,但是允许函数嵌套调用。
        函数嵌套定义 : 在一个函数定义内再去定义一个函数;
        函数嵌套调 : 在一个函数内去调用另一个函数。

     6、数组作为参数传递

      数组作为参数是按地址传递
          数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参  数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。

     1 // 定义函数,打印数组中所有的元素
     2 void printArray(int a[], int count) {
     3     for (int i = 0; i < count; i++) {
     4         printf("%d
    ", a[i]);
     5     }
     6 }
     7 int main(int argc, const char * argv[]) {
     8     
     9     // 数组作为函数参数
    10     // 数组名是数组元素首地址
    11     
    12     int array[] = {2, 4, 1, 5, 6, 8};
    13     int count = sizeof(array) / sizeof(int);
    14     
    15     printArray(array, count);
    16     
    17     return 0;
    18 }

    7、作用域

      变量作用域决定了变量的使用范围

      局部变量
        在函数内部定义的变量称为局部变量
        作用域:从定义开始,到 ' } ' 结束
        不同的函数中可以定义相同的变量,因为作用域不同
      全局变量
        在函数外部定义的变量称为全局变量
        作用域:从定义位置开始,到文件结束

        定义在主函数中,在其他.m文件中使用时,需要使用extern声明

  • 相关阅读:
    sql datareader多线程访问时出错
    程序中判断path中是否有某个文件
    asp中接收到querystring是utf8编码的处理方式
    SuppressIldasmAttribute 属性的使用和去掉
    C#中检测access mdb 版本
    发布一款数据库查询工具(更新,支持db2 950 c) 2008429
    多数据库查询工具(更新,支持text file define) 2008527
    ajax loading 总结
    通过网页发送QQ消息
    老板是在Challenge吗?
  • 原文地址:https://www.cnblogs.com/gfxxbk/p/5257329.html
Copyright © 2011-2022 走看看