c语言访问oc变量,C语言-学OC的基础

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

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

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

局部变量:

1> 定义:在函数(代码块)内部定义的变量

2> 作用域:从定义变量的那一行开始,一直到代码块结束

3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收

4> 没有固定的初始值

全局变量

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

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在校课堂上习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值