c语言初学指针,对于java面向对象的初理解

本文通过Java和C语言示例对比,展示了指针概念如何映射到Java面向对象的封装特性中。通过具体代码解释了传值与传引用的区别,并演示了如何使用指针直接修改变量值。

最近在看关于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相当于给指定地址改了地址里面的内容。
}

转载于:https://my.oschina.net/u/3318187/blog/1838556

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值