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個位元組的記憶體空間。