iOS中我们遇到双指针,通常情况下我们是为erorr赋值例如:- (nullable NSDictionary*)attributesOfItemAtPath:(NSString )path error:(NSError *)error
那么”**”是干什么的呢?我们可以用一句话来描述:
只要看到一个方法的参数类型是**,此方法就是要给参数赋值
1.我们先来看一个普通的例子
输出为:
输出不是456。由此可见这样赋值是给参数赋不上值的,因为当我们把一个参数传到一个方法里面的时候,系统内部会做一个事情,系统会拷贝一个指针指向theStr指向的字符串对象。而“str = @”456””代表str这个指针指向了@”456”这个对象。而不是theStr这个指针指向了@”456”。在方法里的指针都是这样做的。
2.在C语言里我们为参数赋值,会传一个地址作为参数,&符号为取址运算符,&num为num的地址。系统也会拷贝一个指针,但是拷贝的指针指向的是num的地址。下例中*okNum是一个int类型的指针,它指向的是&num(num的地址)。通过修改指针指向的地址达到修改参数的目的。
输出为:
3.在OC中我们的对象的指针已经带了一个*号,所以就会出现双指针的情况。*str指向的是*theStr指向的内存地址。*str指向了@”456”说明指针 *theStr指向的地址改成了@”456”.及theStr的值变成了@”456”。
输出为:
新闻热点
疑难解答