最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们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";
}
}
输出如下:
===========================
cat.name = cat david
i = 100
i = 100
cat.name = cat jack
===============================
再来看c的内容
//变量名,对内存空间上的一段数据的抽象
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相当于给指定地址改了地址里面的内容。
}