1. 程式人生 > >c指標 與 java引用

c指標 與 java引用

c 指標示例:

#include <stdio.h>
int test(int *p);
int main(){
    int a = 1;
    int *p = &a;
    test(p);
    printf("a = %d\n", a);
    return 0;
}

int test(int *p){
    *p = 5;
    return 0;
}

列印的結果是:5
1. int a = 1; 的意思是說:開闢一塊記憶體,該記憶體塊中儲存的值是數字 1(二進位制的),記憶體塊的別名就是“a”,
2. int *p = &a; 的意思是說:再開闢一塊“記憶體” ,該記憶體塊中儲存的是 a 的地址
3.

test(p); 的實質是,將 main 方法中的 p(main)的值複製給, test函式的形參 p(test的)
4. *p = 5; 的意思是說:將指標p所指向的那塊記憶體儲存和值變為 5,也就是 a記憶體塊的值變為了 5
所以最後列印的a的值是 5

java 引用示例:

public static void main(){
    Note note = new Note(1);
    test(note);
    System.out.println(note.data);
}

static void test(Note note){
    note = new
Note(5); }

輸出的結果是 : 1
與c相同,在main()方法中呼叫test()方法時, 將note的引用傳遞給了test()
也就是說,main() 中的 note 和 test()中的note 並不是同一個變數,只是它們都指向了堆記憶體中 值為 1 的節點
所以即使 test()中 note =new Note(5); 並不會使 main中的 note 的值改變。除非將這句改成這樣: note.data = 5, 這樣main中的 note的值也就變成5了。