c指標 與 java引用
阿新 • • 發佈:2018-11-06
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了。