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

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. NYOJ题目840吃花生

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAKdCAIAAABeSGNbAAAgAElEQVR4nO3dPXKkuvv28f8mnHshjn

  2. weblogic监控

    http://wenku.baidu.com/link?url=tQPQ-dgm7NOkEGj_vemwtsPd6TJ6W3x6_0UBLgw61N982SwPlz-QFxqncsmPGqHwJAEF ...

  3. Java Eclipse进行断点调试

    如何调试Java程序? 大家最开始学习Java,都会觉得IDE调试好高端有木有,其实很简单了. 下文会尽量简单直观的教会你在Eclipse中调试,其他的IDE调试步骤也是类似的. 1.在你觉得有错的地 ...

  4. Linux常用命令学习1---(安装、文件系统、目录操作命令cd ls mv cp rm mkdir、链接命令ln……)

    1.理解Linux的文件系统:分区和挂载点    挂载点和路径名无关 /根目录下的/boot完全可以时独立于 /的独立的挂载点,只要你设置就可以    linux安装时候,必须要有这两个分区 / 和 ...

  5. 【PHP绘图技术&&验证码绘制】

    PHP绘图是比较简单的事情,基本绘图如直线.圆.矩形.弧线.填充矩形.填充扇形.非中文字的打印.中文文字的打印在在下面的代码中会纤细讲解. 需要支持中文的字体,可以到windows自带的字体库中找,并 ...

  6. .NET Expression Tree

    Expression Tree 第一个简单的例子. [TestMethod] public void GodTest() { Expression<Func<int, int, int&g ...

  7. [Mobile] 手机浏览器输入框-数字输入框

    手机浏览器的输入框,一直都是以web的方式进行开发的,没有关注到用户体验,领导提出了输入框要弹出数字输入框,想来应该有这种技术能实现.   搜索之后发现可以使用type="number&qu ...

  8. PMP 第八章 项目质量管理

    1规划质量 2实施质量保证 3实施质量控制 质量成本 1.等级和质量的区别?现代质量管理的重要性,关注图8-2    质量是一些列内在特性满足要求的程度,而等级是对用途相同但技术特性不同的产品或服务的 ...

  9. 如何通过阅读C标准来解决C语言语法问题

    有时候必须非常专注地阅读ANSI C标准才能找到某个问题的答案.一位销售工程师把下面这段代码作为测试用例发给Sun的编译小组. foo(const char **p) {} int main(int ...

  10. hibernate 关联映射

    关联关系大致分为两大类: 1.单向关系:只需单向访问关联端.例如:只能通过老师访问学生,或者只能通过学生访问老师. 2.双向关系:关联的两端可以互相访问.例如:老师和学生之间可以互相访问. 单向关联可 ...