1、OC是在C语言的基础上进行扩展的,在OC中直接用C语言进行coding也是可以通过编译的。因此,函数定义的语法格式如下:

函数返回值类型  函数名(形参列表)

//由零条或多条可执行性语句组成的函数提

2、函数的传递机制:值传递、地址传递。

值传递:将实际的参数值的副本(复制品)传入函数内,参数本身不受函数内对其副本的改变的影响。

地址传递:将实际参数的地址的副本传入函数,函数中对地址对应位置的值进行改变会影响到实际参数的值。

3、内部函数和外部函数:

内部函数:定义函数时用static修饰,该函数只能被当前源文件中的其他函数进行调用,这种函数称为内部函数。内部函数具有更好的内聚性,它可以保证该函数只能在该源文件中被调用,从而可以避免多个源文件中重名函数的冲突问题。

外部函数:定义函数时使用extern修饰,或者不使用任何修饰符修饰,它可以被任何文件中的函数调用,这种函数称为外部函数。一般用于库函数的定义中。

4、局部变量与全局变量:

局部变量:分为函数局部变量和代码块局部变量。C语言并不强制对局部变量赋初始值,在程序员对局部变量赋初始值之前,局部变量的值是不确定的,这是因为每次调用函数的时候都会为该变量重新分配内存,而重新分配的内存中的值是不确定的。

全局变量:也称为外部变量,该源文件中的所有函数都可以使用全局变量。如果局部变量和全局变量同名,则局部变量会覆盖全局变量。全局变量又分为外部全局变量(所有源文件的函数都可以访问的变量,用extern关键字声明或者不声明)和内部全局变量(当前源文件中的所有函数都可以访问的变量,用static关键字声明)。

5、C语言程序运行的内存大致可以分为三个部分:程序区、静态存储区、动态存储区。

静态存储区:静态存储区的变量在程序运行开始时分配内存,直到程序结束才会释放内存,在程序运行过程中,静态存储区的变量总是占据固定的内存,静态存储区总是存放两类变量:全局变量、static修饰的局部变量。

动态存储区:动态存储区的变量所在的存储空间是动态分配的,当程序多次调用同一个函数时,该函数的局部变量(非static修饰的变量)每次都会动态分配内存空间,每次函数结束都会自动释放这些内存空间,这种分配和释放都是动态的。动态存储区主要存放三类数据:函数的形参、非static局部变量、函数执行的现场数据以及返回地址等。

6、C语言中变量的存储类别:

auto:自动存储几只,局部变量默认采取这种存储机制

static:指定将局部变量存放在静态存储区,这样该变量所占的空间爱你的一直保存直到程序退出。

register:指定将该变量存放到寄存器中。

extern:定义外部局部变量。

 #import <Foundation/Foundation.h>

 //了解auto和static的区别
void fac(int n)
{
auto int a = ;
static int b = ;
a+= n ;
b+= n ;
printf("a = %d, b = %d",a, b) ;
} int main(int argc, char * argv[])
{
//才用循环调用三次
for(int i = ; i < ; i++)
{
fac(i) ;
}
} /* 输出结果为
a = 1, b = 1
a = 2, b = 2
a = 3, b = 4
*/

7、预处理是C、OC的特殊命令。在编译器对程序进行编译之前,编译器会对这些预处理进行处理,然后将这些预处理的结果与源程序一起进行编译。

预处理的两个特征:1、预处理命令都必须以#开头;2、预处理通常都位于程序开头部分。

 //使用#define执行宏定义,#undef取消宏定义
#define YES 1
#define PI 3.1415926 #undef YES //带参宏定义
#define AREA(r) PI*r*r // C语言使用#include导入其他源程序
// OC语言使用#import导入其他源程序 //使用#ifdef、#ifndef、#else、#endif执行条件编译
#ifdef 宏名称
//语句
#else
//语句
#endif //使用#if、#elif、#else、#endif 执行条件编译
#if 表达式
//语句
#elif 表达式
//语句
//可以有多个#elif语句
#else
//语句
#endif

OC学习2——C语言特性之函数的更多相关文章

  1. OC学习3——C语言特性之指针

    1.指针是C语言中的一个非常重要的概念,实际上,OC系统类的变量.自定义类的变量等都是指针.定义指针变量的语法格式如下,其中*代表一个指针变量,整个语法代表定义一个指向特定类型的变量的指针变量.注意: ...

  2. GO学习-(12) Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民 ...

  3. (C/C++学习)13.C语言字符串处理函数(一)

    说明:字符串处理的函数很多,本文将例举经常遇到的一些函数加以说明. 一.字符串的输入输出 头文件:<stdio.h> 1.利用标准输出函数 printf() 来输出,将格式设置为 s% . ...

  4. (C/C++学习)14.C语言字符串处理函数(二)

    说明:上节着重解释了字符串处理的库函数处理,这节将针对一些常用的需求,进行非库函数的处理. 一.去除某一个字符串中的某个字符 1.去除字符串右边的空格 void trimStrRightSpace(c ...

  5. 【转】浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  6. 浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  7. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  8. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  9. OC学习6——面相对象的三大特性

    我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征.OC学习篇之---类的三大特性(封装,继承,多态) 1.封装(Encapsulation)是指将对象的状态信息 ...

随机推荐

  1. 2、python的变量

    1.什么是变量 变量>顾名思义变化的量,量是一种表示一种状态的方式,而且可以变 2.为什么要用变量 程序的执行是一直处于一种变化状态的,我们可以用变量表示表示程序进行中的状态,并将它记录下来 3 ...

  2. 20175126《Java程序设计》第一周学习总结

    # 学号 20175126 <Java程序设计>第一周学习总结   ## 教材学习内容总结   - 1.安装了WINDOS系统的JDK,并学会了利用JDK编写并编译JAVA程序的基本方法. ...

  3. springboot自带定时任务和集成quartz

    1,springboot自带的定时任务  默认是单线程 有这个依赖就可以 <dependency> <groupId>org.springframework.boot</ ...

  4. 回溯算法_ BackTracking

     目前还存在的疑问: 1. 所谓的该分支满足条件之后就回退到上一层节点,可是加谁呢? x[i+1]  ?? 加到 N, 不满足target sum条件就返回上一级(同时改变上一级数为 i+1...纵向 ...

  5. Oracle 忘记sys与system管理员密码重置操作

    首先打开cmd 执行 orapwd file=C:\app\PWDorcl.ora password=orclorcl C:\app\PWDorcl.ora是你要存放的路径文件 Password=or ...

  6. magento中Model创建以及该Model对于数据库的增删改查

    本文是按照magento英文文档照做与翻译的. Model层的实现是mvc框架的一个巨大的部分.它代表了你的应用的数据,或者说大多数应用没有数据是无用的.Magento的Model扮演着一个重要的角色 ...

  7. RDS MySQL InnoDB 锁等待和锁等待超时的处理

    https://help.aliyun.com/knowledge_detail/41705.html 1. Innodb 引擎表行锁等待和等待超时发生的场景 2.Innodb 引擎行锁等待情况的处理 ...

  8. # 2019-2020-3 《Java 程序设计》第五周学习总结

    2019-2020-3 <Java 程序设计>第五周知识总结 1.使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两 ...

  9. SAS DATA步读取数据

    上面一节讲了SAS的基本概念,以及语法结构,这次主要讲解SAS DATA步读取数据.    1 ·列表输入    2 ·按列输入    3 ·格式化输入  使用DATA步读取数据的基本形式如下: DA ...

  10. 从中央仓库下载所想要的jar包

    中央仓库地址:https://mvnrepository.com/ 这边我搜索一个commons-logging包作为例子: 点击下面第二个绿色的comons-logging进入这个页面: 一.win ...