美文网首页
OC之 *和&

OC之 *和&

作者: JeffWei | 来源:发表于2019-05-04 17:06 被阅读0次

*符号

放左边一般表示声明一个指针,如:

Model *model = [[Model alloc] init];

*在等号左边,表示声明了一个Model类型的指针变量,指向了内存所在的地址.
若*符号在等号右边,则表示取该内存地址的值,理论上这样的写法应该是对的:
Model m = *model;

但编译器会报错:

Error:(29, 11) interface type cannot be statically allocated

大概意思是,不允许静态的初始化实例对象,你必须使用alloc init方式来初始化对象,但是你是可以断点查看*model的,它就是一个Model对象类型,和Model *类型不同,它后面不会带有地址,是个纯Model类型

&符号

表示取指针指向的值或者量,指针变量也是变量,它也有对应的地址,Model *model本质上model是指针类型变量,那么它本身也是需要分配内存地址的,为&model,也是指针,是Model*类型的指针,那么,它最终的类型为Model**,即指针的指针类型,且指针的指针地址分配在栈空间,即:

Model *model = [[Model alloc] init];

情况下,
model地址在堆,指向对象的内存地址
&model(Model**类型)地址在栈,为model指针变量本身的地址

相关文章

网友评论

      本文标题:OC之 *和&

      本文链接:https://www.haomeiwen.com/subject/dqqfoqtx.html