1.二级指针
*有两种用途,用在定义的时候,一级指针加一个,二级指针加两个,以此类推;用在其它地方为取值作用,取地址对应的值。
&的用途为取名称对应内存地址。
int a = 100;
int *p1 = &a;
int **p2 = &p1;
内存地址 &p2 &p1 &a
|——————| |———————| |————————|
内存量 | &p1 | | &a | | 100 |
|___________| |_____________| |______________|
名称对应 p2 p1 a
2.C语言函数的值传递
看如下代码:
- (void)test{
int i = 100;
change(i);
NSLog(@"i = %d",i);
}
void change(int ic){
ic = 66;
}
输出结果为i = 100,change()函数并不会改变 i 的值,因为传递的参数,是 i 在内存中的值,如果用指针进行参数传递:
- (void)test{
int i = 100;
change(&i);
NSLog(@"i = %d",i);
}
void change(int *ic){
*ic = 66;
}
这样,输出的结果为 i = 66,因为传参时, i 的内存地址赋给了 一级指针变量 ic,ic此时是直接操作 i 的。
3.指针的指针(二级指针)
先说下我的大致理解,一级指针:对内存值的管理;二级指针:对地址,内存空间的管理。(如有错误,请指出)
- (void)test{
int *num;
int result;
result = num_init(&num);
}
int num_init(int **num_t){
*num_t = malloc(100);
return 1;
}
malloc函数为,向系统申请分配大小100个字节的内存空间。