打印内存地址
基本数据类型
定义一个基本数据类型,会根据变量类型分配对应的内存空间。比如定义一个int类型的变量a。
int a = 10;
内存如下
输入变量a在内存中内存地址
NSLog(@"变量a在内存的内存地址=%p", &a);
基本类型的指针
基本类型的指针变量本质就是保存了变量的内存地址
int a = 10;
int *p = &a;
内存如下
输入指针变量保存的内存地址,以及指针变量本身自己在内存分配空间的内存地址
NSLog(@"指针变量p的保存的地址=%p", p);
NSLog(@"指针变量p的自身在内存地址=%p", &p);
对象类型
对象类型的指针变量也不例外,本质也是保存该实例在内存的地址
Person *p = [[Person alloc] init];
内存如下
输出对象在内存空间的值也就是等于输出指向该实例的指针变量保存的内存地址
NSLog(@"Person实例的内存地址=%p---指针变量p的内存地址=%p---指针变量p保存的内存地址=%p", p, &p, p);
补充
补充一
在实际的开发中我们通过下面打印
Person *p = [[Person alloc] init];
NSLog(@"%@", p);
控制台输出的地址就是对象实例在内存中的地址也是指针变量p保存的地址。
补充二
我们声明了一个指针类型的变量默认通过NSLog输出为nil,本质就是该指针变量保存的指针变量保存的地址为0x0
Person *p;
NSLog(@"%@---%p", p, p);
补充三
使用weak修饰的属性指针变量,指向的对象在内存中销毁后,指向该对象的指针变量自动被赋值为null。