最近在看關於c語言的指針,學習下,發現指針原來運用理解成其實能夠抽象出咱們java的面向對象封裝,地址--> 對象或變量,先看一段代碼:java
public class Cat {
public String name;
}函數
public class CatTest {
public static void main(String[] args) {
Cat cat = new Cat(); //new了一個對象,至關於對象便是指針指向了一個地址
cat.name = "cat david";
System.out.println("cat.name = " + cat.name);
int i= 100;
System.out.println("i = " + i);學習
//i的值不會變化,是由於 i傳入的是數值,而change(i),只是新開拓了一個空間地址i指針
//並賦值給了新創的i變量,因此值沒有發生變化
change(i);
System.out.println("i = " + i);
change(cat);
//cat是一個對象,指向的是一個地址門牌,而change(cat)是找到cat的地址,修改了cat地址門牌下對應的name指向地址(便是指針)的數據內容。
System.out.println("cat.name = " + cat.name);
}
public static void change(int i){
i = 200;
}
public static void change(Cat cat){
cat.name = "cat jack";
}
}對象
輸出以下:內存
===========================class
cat.name = cat david
i = 100
i = 100
cat.name = cat jack變量
===============================數據
再來看c的內容static
//變量名,對內存空間上的一段數據的抽象
void main(){
int i = 90;
i = 89;
printf("i的值爲:%d\n",i);
int* p = &i;
//*給p上存儲的地址賦值 這種方式叫間接賦值
//指針最最重要的用法,正是有了它,纔有了java的面向對象。
// *p = 200;
change(i)
printf("i的值爲:%d\n",i);
change(p)
printf("i的值爲:%d\n",i);
system("pause");
}
輸出:
i的值爲:89
i的值爲:89
i的值爲:300
//局部變量 不改變main函數裏面的值
void change(int i){//這兒至關於局部變量開創了一個新的內存空間
i = 300;
}
void change(int* p){ *p = 400;//p是i變量的地址,這一行*p至關於給指定地址改了地址裏面的內容。 }