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 ...
随机推荐
- Linux下添加php的zip模块
今天早上开发的人员过来跟我说,测试机上的XX项目报了个错: include(ZipArchive.php): failed to open stream: No such file or direct ...
- UE4 的json读写方式
转自:http://blog.csdn.net/cartzhang/article/details/41009343 JSON 的解析有很多开源库.UE4的JSON使用在代码的Public->S ...
- mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201
转自:https://blog.csdn.net/snakemoving/article/details/76052875 前天遇到一个问题 异常显示如下: 引用 Exception in threa ...
- JSF - Access Managed-Bean in a servlet
When you have to access your Managed Bean in a servlet, it depends on the scope you set for the Bean ...
- OpenGL 4.0的Tessellation Shader(细分曲面着色器)
细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:https://www.opengl.org/wiki/Rend ...
- java.io.CharConversionException: Not an ISO 8859-1 character:
java.io.CharConversionException: Not an ISO 8859-1 character: XXX 这个问题可能是因为outputstream输出中文字造成的影响. r ...
- python's default parameter
[python's default parameter] 对于值类型(int.double)的default函数参数,函数不会保存对默认类型的修改.对于mutable objectd类型的默认参数,会 ...
- Selenium+TestNG+Maven 搭建
Java环境配置 Eclipse配置TestNG Eclipse配置Maven pom.xml文件相关配置,添加依赖selenium和TestNg的jar包 <!-- https://mvnre ...
- Pollard Rho因子分解算法
有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...
- js 滚动条滚动到底部触发事件
一.前言 在开发项目时,常常需要展示大量数据.如果全部显示出来,数据相对少时,看不出来什么不同,如果数据很多时,一次请求全部显示,这就相当可怕了. 面对这种问题,PC里使用了分页效果,将数据分成一页页 ...