打印內存地址
基本數據類型
定義一個基本數據類型,會根據變量類型分配對應的內存空間。比如定義一個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。