oc中* 与**的区别以及如何修改传递的实参数

指针的概念

在oc中用*符号申明指针变量,例如,NSString *str = @"Hello, World!"表示声明了一个指向NSString类型对象的指针变量str

这里重点记住

(1)str代表的是一个指针变量,里面存储着Hello, World!的地址

(2)*str代表的是获取指针变量str指向的地址存储的值,例如,int value = *p;表示将指针p指向的内存地址中的值赋给变量value

(3)**代表指向指针的指针,例如 int **pp = &p,这里&p代表的是p的地址,pp指向它,说明pp是指向p的指针,所以用**来申明指针的指针,也就是说只要看到**就要知道,他后面带的变量是指向指针的指针

先看下面这个例子

int a = 3;

int *p = &a;

*p = 5;
    
NSLog(@"a 的值%d", a);;//最终的值为5

我们来解读一下上面这个代码:

(1)申明了一个int型的变量a等于3

(2)定义一个指向int类型的指针变量p,指向的是a的地址,这个地址中存储着3

(3)把指针变量p指向的地址里面的值变成了5,实际上就是把上面3所在的地址中的3变成了5,所以最终a变成了5

再来看一个例子

 NSString *jhf_string = @"32";

 //调用changeString方法
 [self changeString:&jhf_string];


 NSLog(@"jhf_string==%@",jhf_string);//30

-(void)changeString:(NSString **)string{
    *string = @"30";
}

继续解读上面代码:

(1)申明了一个指向NSString类型的指针变量jhf_string,并且它指向的地址里面存储着32这个字符串

(2)调用changeString方法,把jhf_string这个指针变量的地址传进去

,实际上传进去的是指向指针jhf_string的指针

(3)在changeString方法中,传进来的string是指针的指针,*string代表的是这个指针的指针最终指向的地址里面的值

你可能感兴趣的:(iOS开发记录,ios,objective-c)