美文网首页
C语言-学OC的基础

C语言-学OC的基础

作者: VampireJune | 来源:发表于2018-09-14 18:33 被阅读0次

C是OC学习的基础,OC是从C衍生出来的,所以先学习C语言,主要学习编程语言的语法,积累一个编程思想

我搜到了一个很好的C语言入门技术博客,觉得很好,借鉴到这里记录起来,膜拜学习

C语言快速入门系列列表

C语言快速入门系列(一)

C语言快速入门系列(二)

C语言快速入门系列(三)

C语言快速入门系列(四)

C语言快速入门系列(五)

C语言快速入门系列(六)

C语言快速入门系列(七)

C语言快速入门系列(八)

C语言快速入门系列(九)

根据变量的作用域,可分为:

  1. 局部变量:
    1> 定义:在函数(代码块)内部定义的变量
    2> 作用域:从定义变量的那一行开始,一直到代码块结束
    3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
    4> 没有固定的初始值

  2. 全局变量
    1> 定义:在函数外面定义的变量
    2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)
    3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毀
    4> 默认的初始值就是0

题另出一些OC中经常用到的难点

1. extern

  • extern 和 外部函数

    • 外部函数:定义的函数能被本文件和其他文件访问
    • 默认情况下所有的函数都是外部函数
    • 不允许有同名的外部函数
  • extern 对外部函数的作用

    • 完整地 定义 和 声明 一个外部函数
    • extern 可以省略,默认情况下 声明 和 定义 的函数都是外部函数
extern void june(); // 完整地声明一个外部函数,extern 可以省略
extern void june() // 完整地定义一个外部函数,extern 可以省略
{
  ...
}
  • 全局变量 分2种 : 外部变量、 内部变量

  • extern 和 外部变量

    • 外部变量
    • 默认情况下,所有的外部变量都是全局变量
    • 不同文件中的同名 外部变量,都代表着同一个变量
  • extern 对外部变量的作用

    • 声明 一个外部变量
    • 可以声明在文件头部,也可以在函数里面声明,意味着在文件的任意位置都可以声明

2. static

  • static 和 内部函数

    • 内部函数:定义的函数只能被本文件访问,其他文件不能访问
    • 允许不同的文件中有同名的 内部函数
  • static 对内部函数的作用

    • 定义 和 声明一个内部函数
static void june(); // 声明一个内部函数
static void june() // 定义一个内部函数
{
  ...
}
  • static 和 全局内部变量

    • 全局内部变量:定义的 全局内部变量 只能被本文件访问,不能被其他文件访问
    • 不同文件中的同名 全局内部变量,互不影响
  • static 对全局内部变量的作用

    • 定义一个 全局内部变量(全部变量的作用域仅限于当前文件)
  • static 和 局部变量

  • static 对局部变量的作用

    • 让局部变量只初始化一次
    • 局部变量在程序中只有一份内存
    • 延长局部变量的生命周期,直到程序结束,才会被销毁
    • 并不会改变局部变量的作用域
  • static 修饰局部变量使用场合

    • 如果某个函数的调用频率特别高
    • 这个函数内部的某个变量值是固定不变的

3. const

  • const 和 全局常量

    • 例: #define a 0.5 VS const CGFloat a = 0.5;
    • 类似宏,不能改值
    • 有多少使用宏的地方,就会开辟多少临时存储空间
    • 使用 const ,就只会开辟一个存储空间
    • 还可以使用 extern 全局引用
    • 如果 extern 全局引用的是个常量,最好加一个 const
    • 例:extern const CGFloat a (编译阶段就能很快发现,避免修改被 const 修饰的常量,运行时崩溃)【extern 可以写成 UIKIT_EXTERN(一定要引入 UIKit 框架)】
  • const 和 指针

 定义一个指针变量
 int *p = NULL;

 定义1个 int 类型的变量
 int a = 10;
 p = &a; // 把 a 的地址给了p,指针变量 p 指向 a 
 *p = 20; // 将 a 的值改为了 20

  const右边是谁,就代表着修饰的是谁

  const int *p  : 这样写代表 `*p` 是一个常量,const右边是 `*p`,代表 `*p`` 不能修改所指向变量的值,p 可以改,可以指向其他变量
  int const *p  : 同上
  int * const p :  这样写代表 `p` 是一个常量,const右边是 `p`,代表 `p` 不能被修改,不能再指向其他变量,`*p` 可以修改所指向变量的值
  const int * const p : (指针 p指向的变量 和 p 指向的变量值都不可修改)
  • const 和 OC字符串
    • NSString * const name = @"Vampire";
    • 修改字符串的值是 name = @"June"
    • 所以,const 右边是 name,修饰的是 name ,才不能修改
    • *name 在 OC 中是不合理的,所以没有意义

4. 数组 和 指针

```
int * p;
int numbers[4] = {1, 2, 3, 4};

## 指针 p 的加减法运算

// 指针 p + N 
* p 里面存储的地址值 + N * 所指向类型所占用的字节数
// 指针 p - N 
* p 里面存储的地址值 - N * 所指向类型所占用的字节数

## 数组名 含义
* 存储的是`数组首元素`的地址
* 等价于 一个指向`数组首元素`的指针
* `数组名 + 1` 的跨度 : `数组首元素`的占用字节数

## 其他结论
* `&num + 1` 的跨度 : `num` 的占用字节数


* numbers : 相当于 &numbers[0],等价于指向 numbers[0] 的指针
* &numbers : 等价于指向 numbers 数组的指针


int num[2][2] = {
   {1, 2} // num[0]
   {3, 4} // num[1]
};

// num[0] : 相当于 &num[0][0],等价于指向 num[0][0] 的指针
// num[1] : 相当于 &num[1][0],等价于指向 num[1][0] 的指针
// num : 相当于 & num[0],等价于指向 num[0] 的指针
// & num : 等价于指向 num 数组的指针
```

**一道面试题**

```
int number[4] = {10, 20, 30, 40};
int *p = (int *)(& number + 1)
NSLog(@"%d", *(p - 1));         // 40
```

相关文章

  • C语言-学OC的基础

    C是OC学习的基础,OC是从C衍生出来的,所以先学习C语言,主要学习编程语言的语法,积累一个编程思想 我搜到了一个...

  • 面试题之 OC

    OC语言的特性? ①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;②OC 语言与 Jav...

  • OC语言前期准备

    一、OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚...

  • 第一章:熟悉OC

    OC语言特性:-1. OC是在C的语言基础上添加了面向对象特性。 -2. OC与C++,JAVA等面向对象的语言类...

  • EOC2.0编写高质量iOS与OS X代码的52个有效方法笔记(

    第1条:了解OC语言的起源 - OC在C语言基础上添加了面向对象特性,OC是C的超集。OC使用“消息结构”(mes...

  • IOS学习之——新手基础学习资料分享

    /* 1、OC简介: OC 是C语言的超集,它在C语言的基础上增加了最小的面向对象的语法 2、对比C来学习OC 数...

  • 随笔

    oc实质上是在c语言的基础上进行了一层oc包装,也可以说c语言就是oc的父类(超类),所有oc语言能实现的功能用c...

  • 简述OC这门语言

    OC语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码...

  • OC思想与基础语法

    OC简介 在C语言的基础上,Objective - C增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码...

  • iOS面试题

    1. OC语言的基本特点 OC语言是C语言的一个超集,只是在C的基础之上加上了面向对象(oo)的特性;OC与Jav...

网友评论

      本文标题:C语言-学OC的基础

      本文链接:https://www.haomeiwen.com/subject/wfcagftx.html