指针
- 变量的内存地址就是该变量的指针,而用于保存内存地址(指针)的变量就是指针变量。
关于指针的2个基本的运算符:
- &:取地址运算符,用于读取后面变量的保存地址。是单目运算符,后面紧跟一个变量,
- *:取变量运算符,用于读取该指针变量所指的变量。单目运算符,后面紧跟一个指针变量。
|
|
打印结果
|
|
我们知道打印指针,LLDB中应该返回该指针存储的对象的地址,比如:
|
|
NSNumber
其中对于指向NSNumber对象的指针n,由于 Tagged Pointer 机制,直接存储在指针本身中,故而在64位架构中NSNumber 成了一个没有 isa 假的对象;
|
|
故而,会出现,当我们想真正打印指针p中存储的地址的时候–不显示地址,打印指针地址直接显示NSNumber数值的状况(我也只能这么向自己解释了):
|
|
NSString + 困惑
但是,对于指向字符串类型的指针,我却无法解释:
|
|
也是没有打印地址!直接显示对象的值!
|
|
显然,一个占8个字节指针也是放不下这么多字符串的.
而且,为什么,*号后面➕指针,只能打印出基本数据类型呢?
|
|
除了指向整型的指针,指向对象的指针无法通过*object获取该对象本身都?
什么鬼?
???
??
?
答案:
最近看了一篇关于LLDB的文章–认识Xcode中的重要成员:lldb调试器—-引用的原文,其中讲到:
在OC里所有的对象都是用指针表示的,所以一般用p、print、call、expression –打印的时候,打印出来的是对象的指针,而不是对象本身。如果我们想打印对象。我们需要使用命令选项:-O。为了更方便的使用,lldb为expression -O –定义了一个别名:po
————原来po打印的是对象,p打印的是指针!!