C语言特性

       我正在学习OC,跟大家分享一下我的学习历程,希望对以后学OC的同学们有点帮助,写得不好的地方希望大家不要介意,可以给我指出来,也可以给提些意见。


1.函数

  1.定义函数

    函数的返回类型  函数名  (行参列表)

   {

        //多条可执行的语句

    } 

    *返回值为Objective-C允许的任何数据类型,包含基本类型和指针类型。如果没有返回值,则必须用void来声明,否则系统默认为int。

    *函数名只要是个合法的标识符就好。但在OC中,最好是有一个或多个有意义的单词连接而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间无需使用任何分隔符

    *行参列表用于定义该函数可以接受的参数,行参列表由零组到多组“参数类型  行参名”组合而成,多组参数之间以英文逗号(,)隔开,行参类型和行参名之间用空格隔开。在定义函数是一旦制定了行参列表,则调用该函数是必须传入对应的参数值——谁调用函数,谁负责为行参赋值。

  2.函数声明

    如果被调用的函数位于后面,,或函数定义在另一个源文件中,此时就可以通过函数声明来指定该函数的行参列表和返回值类型。

    函数声明有两种形式:

    *只声明函数的返回值类型、函数名、行参列表的行参类型,不保留行参名。

    *声明函数的返回值类型、函数名、完整的行参列表,包括行参名。

  3.递归

    一个函数自己体内调用它自身时,被称为函数的递归。

    当一个函数不断调用它自身时,在某个时刻的返回值必须是确定的,既不在调用它本身。否则这种递归就变成了无穷递归,类似于死循环。因此定义递归函数时有一条最重要的规定:递归一定要向已知方向递归。


2.局部变量与全局变量

  在函数内部定义的变量就是局部变量,局部变量只在该函数内部有效,只在该函数内部才能使用它们,在函数外部无法访问这些变量。定义在函数外部的变量是全局变量,全局变量可以被该源文件中的所有函数访问,它的作用域为:从定义该变量的位置开始,到该源文件结束。

  C语言并不强制对局部变量赋初始值,但在给它们赋初始值之前,它们的值是不确定的

  在一个函数内部,如果全局变量和局部变量同名,局部变量将会覆盖全局变量,这意味着在该函数内部,全局变量将会失效。

  

3.预处理

  预处理命令有两个特征

  *都必须以#开头

  *预处理命令通常位于程序开头部分

  #define的作用就是为字符串起个名字,例如 #define  PI 3.1415926   使用 PI 代替了3.1415926

  还可以在宏定义中使用参数。 例如,在上面的宏定义后再加上  #define  GIRTH(r)  PI * 2 * r.

  #include 和 #import 的区别:

  #import更加好用

  使用#include需要程序员自行判断是否存在重复导入的情况,如果开发者的#include指令导致了重复导入,它不会给出提示。

  #import更加智能:大部分时候,#import的功能与#include功能相似,但#import可以帮程序员判断,避免重复导入的问题

  如果导入用户自定义的源文件,再#import后使用双引号来包含源文件的文件名;如果要导入系统的源文件,则在#import后使用<和>来包含源文件的文件名

 

4.指针

  指针的知识太多,在C语言中,最重要的就是指针这里的内容,所以要在C语言中好好学习指针,这里就不说了


5.结构体

  1. 定义结构体 

    定义结构体类型

    语法格式:

     struct 结构体类型名

    {

         //成员列表  

     };

     然后定义结构体变量

     语法格式: struct  结构体名  变量名;

   2. typedef语句

     可以用typedef为已有的数据类型另起一个名字。例如:typedef  int Counter ; int 类型就有了一个新名字:Counter。


6.

  1.块的基本语法

    定义块的语法格式如下:

    ^[块返回值类型] (行参类型1 行参1, 行参类型2 行参2, ...)

    {

         //块执行体

     }

     * 定义块必须“ ^ ”开头

     * 定义块的返回值类型可以省略,而且经常都会省略声明块的返回值类型

     * 定义块无须指定名字

     * 如果块没有返回值,块无须带参数,通常建议使用void作为占位符。

     变量的语法格式:

     块返回值类型( ^块变量名)(行参类型1, 参类型2, ...);

     定义块变量时,无须声明行参名,只要指定行参类型即可。类似的,如果该块不需要行参,则建议使用void作为占位符。

     下面的程序将会示范有参数和无参数两种块的定义和调用

 

  2.块与局部变量

    块可以访问程序中局部变量的值,当块访问局部变量的值时,不允许修改局部变量的值。

  3.直接使用块作为参数

    当把块作为方法参数时,无须定义块变量,直接把块作为参数传给制定的方法即可。需要指出的是,块只能作为方法的最后一个参数。

  4.使用typedef定义块变量类型

    使用typedef可以定义块变量类型,一旦定义了块变量类型,该块变量主要有如下两个用途

    *复用块变量类型,使用块变量类型可以重复定义多个块变量

    *使用块变量类型定义函数参数,这样即可定义带块参数的函数

    语法格式如下:

    typedef 块返回值类型 (^块变量类型)(行参类型1, 行参类型, ...);

    下面的程序将会示范先定义块变量类型,再使用该类型重复定义多个变量。

 

    程序还可以使用该块变量类型定义更多的块变量——只要块变量的行参、返回值类型与此处定义的相同。

    利用typedef定义的块变量类型即可为函数声明块变量类型的行参,这要求调用函数是必须传入块变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值