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

1、函数的声明和定义 

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

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

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

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

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

  返回值

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

    return后面的语句不再执行。      

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

  函数声明   

    严格的函数通常包括三部分: 函数声明、函数定义、以及函数调用。

    函数声明:指的就是函数的描述,也叫函数原型。

       函数声明:

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

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

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

2、函数分类

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

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

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

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

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

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

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

    ...  

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

  从函数定义上来看,函数可分为:
    第一种 无参无返回值 

        void sayHello() {
    printf("hello, 约吗?");
    }
    第二种 无返回值 有参   

       void printSum(int a, int b) {
  int sum = a + b;
  printf("sum = %d\n", sum);
  }
    第三种 有返回值,无参
      int randomValue() {
      return arc4random() % ;
      }
    第四种 有返回值,有参    

     int mulValue(int a, int b) {
int mul = a * b;
return mul;
}

3、函数调用

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

    函数名();

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

     对上面函数的调用  

       sayHello();
  printSum(, );   int random = randomValue();
  printf("random = %d\n", random);   int mul = mulValue(, );
  printf("mul = %d\n", mul);

4、形参实参

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

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

5、函数嵌套

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

6、数组作为参数传递

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

 // 定义函数,打印数组中所有的元素
void printArray(int a[], int count) {
for (int i = ; i < count; i++) {
printf("%d\n", a[i]);
}
}
int main(int argc, const char * argv[]) { // 数组作为函数参数
// 数组名是数组元素首地址 int array[] = {, , , , , };
int count = sizeof(array) / sizeof(int); printArray(array, count); return ;
}

7、作用域

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

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

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

iOS学习05C语言函数的更多相关文章

  1. iOS学习09C语言函数指针

    本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...

  2. C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏

    函数指针:指向函数的指针变量. 函数名相当于首地址. 函数指针定义:返回值类型  (*函数指针变量名)(参数类型1,参数类型2,....)=初始值 函数指针类型:返回值类型  (*)(参数类型1,参数 ...

  3. C语言基础:函数(Function) 分类: iOS学习 c语言基础 2015-06-10 21:48 14人阅读 评论(0) 收藏

    函数:一段具有某些特定功能的代码段. 使用函数的严格规定: 1.函数声明 2.函数定义 3.函数调用 函数声明:告知系统编译器该系统的函数名,函数参数,参数类型,参数个数,参数顺序等等,以便函数调用时 ...

  4. C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏

    //欲练此功必先自宫!!!     //第一天:C语言的基础     //进制     //2进制, 10进制, 8进制, 16进制     //注:8进制数前加0, 16进制数前加0x        ...

  5. 菜鸟学习-C语言函数参数传递详解-结构体与数组 分类: C/C++ Nginx 2015-07-14 10:24 89人阅读 评论(0) 收藏

    C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下 ...

  6. iOS学习06C语言结构体

    1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...

  7. iOS学习04C语言数组

    1.一维数组 数组:具有相同类型的成员组成的一组数据 1> 定义 元素:数组中存放的数据成为数组的元素     数组是构造类型,用{...}来给构造类型赋初始值,类型修饰符用来表示元素的类型 类 ...

  8. iOS学习02C语言分支结构

    1. BOOL类型 返回值:真:YES  假:NO BOOL数据类型占一个字节的内存空间,占位符为%d. 计算机在识别时,YES就替换成1,NO就替换成0. bool是C语言中的布尔类型,返回值为tr ...

  9. C语言基础:数组 分类: iOS学习 c语言基础 2015-06-10 21:40 7人阅读 评论(0) 收藏

    数组:是由一组具有相同数据类型的数据组合而来. 数组定义:元素类型修饰符 数组名[数组个数]={元素1,元素2....};  int arr[ 2 ]={1,2};    //正确 int arr[ ...

随机推荐

  1. 苹果应用 Windows 申请 普通证书 和Push 证书 Hbuilder 个推(2)

    s上一篇 讲述了android 如何打包,这一篇 看一下如何IOS下打包 在苹果上申请证书,及其麻烦,我写下来,有需要的直接拿走即可: 首先 苹果的证书分两种 一种是 development 证书,另 ...

  2. 《孙子算经》之"物不知数"题:中国剩余定理

    1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数.  如果 m ...

  3. hdu 2602

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 #include<cstdio> #include<iostream> ...

  4. Delphi中record和packed record的区别

    转载:http://blog.csdn.net/rznice/article/details/6566978 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐. 而第二种带packe ...

  5. MVC4 使用概述

    1.Bundle使用: http://www.cnblogs.com/inline/p/3897256.html 2.MVC总结: http://www.cnblogs.com/xlhblogs/ar ...

  6. 游戏主循环(Game Loop)

    游戏主循环是游戏的心跳,一般使用while循环进行主动刷新. 一次循环由获取用户输入.更新游戏状态.处理AI.播放音乐和绘制画面组成. 这些行为可以分成两类: update_game(); // 更新 ...

  7. document.location.reload();与location.href='xxx'的区别

    document.location.reload();会重新加载页面,onload事件会被触发. location.href='xxx'刷新页面,onload事件不会触发.

  8. html5移动Web开发实战

    1.解决横竖屏字体大小变化 html{ -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; text-size-adjust:100 ...

  9. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  10. barabasilab-networkScience学习笔记5- Barabási-Albert 模型

    第一次接触复杂性科学是在一本叫think complexity的书上,Allen博士很好的讲述了数据结构与复杂性科学,barabasi是一个知名的复杂性网络科学家,barabasilab则是他所主导的 ...