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

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. FILE文件操作

    http://www.jb51.net/article/37688.htm fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FI ...

  2. HBase参数配置及说明(转)

    版本:0.94-cdh4.2.1 hbase-site.xml配置 hbase.tmp.dir 本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默 ...

  3. Linux下第一次使用MySQL数据库,设置密码

    在终端下输入:/etc/rc.d/init.d/mysqld status 查看MySQL状态,看看是否运行. 没有运行的话就输入:/etc/rc.d/init.d/mysqld start 这时,就 ...

  4. Jenkins搭建

    1.添加仓库: sudo wget -O /etc/yum.repos.d/jenkins.repo \ http://jenkins-ci.org/redhat/jenkins.repo sudo ...

  5. js this的使用举例

    js this的使用举例 <script type="text/javascript"> function test(obj){ obj.style.width= ob ...

  6. 7-14 EXISTS子查询

    EXISTS: 只注重于子查询是否有返回行,如果查有返回行返回结果为值,否则为假 并不使用子查询的结果,仅用于测试子查询是否有返回结果. 语法: IF EXISTS (子查询) BEGIN 语句块 E ...

  7. <转>WCF实例化模式与高并发处理

    WCF实例化模式与高并发控制 1.实例化模式InstanceModel 1.1 PerCall:单调模式 每次调用都会产生一个实例 例[ServiceBehavior(InstanceContextM ...

  8. android 相对布局里面的一些属性

    一.   有关于RelativeLayout布局的一些属性 1.  相对于兄弟控件的位置:android:layout_below Android:layout_toLeftof Android:la ...

  9. WPF MVVM初体验

    首先MVVM设计模式的结构, Views: 由Window/Page/UserControl等构成,通过DataBinding与ViewModels建立关联: ViewModels:由一组命令,可以绑 ...

  10. Codeforces Round#250 D. The Child and Zoo(并差集)

    题目链接:http://codeforces.com/problemset/problem/437/D 思路:并差集应用,先对所有的边从大到小排序,然后枚举边的时候,如果某条边的两个顶点不在同一个集合 ...