Objective-C 学习笔记(五) 指针
Objective-C 指针
每一个变量是一个内存位置和每一个存储单元都有其定义的地址,可以使用符号(&)的运算符,它表示内存中的地址访问。
a. 我们定义一个指针变量
b. 分配一个指针变量的地址
c. 最后访问提供的地址指针变量的值。这是通过使用一元运算符*返回值的变量,其操作数位于指定的地址。
实例:
#import <Foundation/Foundation.h> int main ()
{
int var = ; /* actual variable declaration */
int *ip; /* yiibaier variable declaration */ ip = &var; /* store address of var in yiibaier variable*/
NSLog(@"Address of var variable: %x", &var ); //Address of var variable: 337ed41c /* address stored in yiibaier variable */
NSLog(@"Address stored in ip variable: %x", ip ); //Address stored in ip variable: 337ed41c /* access the value using the yiibaier */
NSLog(@"Value of *ip variable: %d", *ip ); //Value of *ip variable: 20 return ;
}
解惑:
- ip = &var 取地址 → *ip = var 取值
- 如果指针指向NULL,地址为0
指针的算术运算
例
ptr是一个整数的指针,它指向的地址1000,假设32位的整数,执行 ptr++ 操作后,指针将指向 1004 位置
因为每次指针递增,它会指向到下一个整数的位置,这是到当前位置的下一个4个字节。此操作将指针移动到下一个内存位置,而不会影响实际值的内存位置。如果ptr指向一个字符的地址是1000,那么上面的操作将指向下一个字符的位置1001
指针递增运算
#import <Foundation/Foundation.h> const int MAX = ; int main ()
{
int var[] = {, , };
int i, *ptr; /* let us have array address in yiibaier */
ptr = var;
for ( i = ; i < MAX; i++)
{
NSLog(@"Address of var[%d] = %x", i, ptr );
NSLog(@"Value of var[%d] = %d", i, *ptr ); /* move to the next location */
ptr++;
}
return ;
}
产生结果如下:
Address of var[] = 7e6f2a70
Value of var[] =
Address of var[] = 7e6f2a74
Value of var[] =
Address of var[] = 7e6f2a78
Value of var[] =
指向指针的指针
实例:
#import <Foundation/Foundation.h> int main ()
{
int var;
int *ptr;
int **pptr; var = ; /* take the address of var */
ptr = &var; /* take the address of ptr using address of operator & */
pptr = &ptr; /* take the value using pptr */
NSLog(@"Value of var = %d", var );
NSLog(@"Value available at *ptr = %d", *ptr );
NSLog(@"Value available at **pptr = %d", **pptr); return ;
}
产生结果如下:
Value of var =
Value available at *ptr =
Value available at **pptr =
解惑:
- var = 3000 , ptr = &var , pptr = &ptr = &&var
- *ptr = var , *pptr = ptr , **pptr = *ptr = var = 3000
参考资料:
Objective-C 学习笔记(五) 指针的更多相关文章
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍
python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...
- Go语言学习笔记五: 条件语句
Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...
随机推荐
- GIT的安装及上传代码到码云
前言 昨天初次接触GIT及码云,虽然用了2个多小时才搞定,但是还是挺开心的.码云是一个可以储存我们写的代码的一个平台,而Git是一款免费.开源的分布式版本控制系统,可以敏捷高效地处理任何或小或大的项目 ...
- Java--普通代码块静态代码块执行顺序
class B { public B() { super(); System.out.println("构造器B"); } { System.out.println("普 ...
- Java前期(静态)绑定和后期(动态)绑定
Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑 ...
- 679. 24 Game
▶ 给出四个整数,求他们是否能加减乘除括号拼凑成 24 ● 代码,11 ms,正向枚举,推广性很强(nums 可以改为任意长度,也不限于拼凑 24 这个和),缺点是只能判定是否有解,不方便输出不重复的 ...
- 决策树与树集成模型(bootstrap, 决策树(信息熵,信息增益, 信息增益率, 基尼系数),回归树, Bagging, 随机森林, Boosting, Adaboost, GBDT, XGboost)
1.bootstrap 在原始数据的范围内作有放回的再抽样M个, 样本容量仍为n,原始数据中每个观察单位每次被抽到的概率相等, 为1/n , 所得样本称为Bootstrap样本.于是可得到参数θ的 ...
- Docker compose自动化部署
安装 https://docs.docker.com/compose/install/#install-compose
- 【转】mac os、linux及unix之间的关系
mac os.linux及unix之间的关系 unix 是由贝尔实验室开发的多用户.多任务操作系统 linux是一类Unix操作系统的统称,严格来说,linux系统只有内核叫“linux”,而li ...
- js中元素结点的引用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- FluentValidation 模型验证
FluentValidation 是 .NET 下的模型验证组件,和 ASP.NET MVC 基于Attribute 声明式验证的不同处,其利用表达式语法链式编程,使得验证组件与实体分开.正如 Flu ...
- MongoDB中使用的SCRAM-SHA1认证机制
摘要: 介绍 SCRAM是密码学中的一种认证机制,全称Salted Challenge Response Authentication Mechanism. SCRAM适用于使用基于『用户名:密码』这 ...