指针
int i = 10;
int *p;
p = &i;
NSLog(@"i:%d,p:%p,*p:%d",i,p,*p);
打印结果:
i:10,p:0x7fff5fbff84c,*p:10
错误示例:
*p = &i;
*号如果不在声明语句中,而只是右边有表达式的话,表明取*号右边变量中所存地址对应内存中的数据(取值、指针运算符)
p是int*类型(一个指向int的指针)
*是这个变量类型名称的一部分(当需要这种类型的变量p,应该这样写:(int*)p)
- 在Objective-C中,引用对象使用的就是指针
NSString *s = @"This is a string";
在纯粹的C语言中,声明指向整形的指针为p,在代码中更倾向于写成 *p
声明之外的意思是:指针p指向的对象
写成*p是因为希望访问指针所指向的整形变量,这就是所谓的指针的解引用(dereferencing)
而在Objective-C中,将指向对象的指针视为对象,这样就永远不能解引用。
如已声明指向NSString的指针s,我们不会使用*s,而是直接使用s,就好像它是字符串一样。在OC语言中处理对象时更倾向于使用指针,而不是指针指向的对象。在后台OC语言会处理好凌乱的事务,会监视指针指向的内存,处理内存必要的操作。这对程序员来说很便利,却会导致代码松散。我们更倾向于说"s是一个NSString",实际上它是一个指向NSString的指针。
- 数据类型 *指针变量名称;
char *c;
double *d;
"数据类型"为该指针变量所存储的指针指向的存储单元中的数据的类型。