天天看點

C語言有關函數傳參及指針的分析

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

繼續閱讀