java与c的一些感想

       由于专业的原因,我到了大三下学期的后半段才学习数据结构。虽然以往学习编程的时候也有接触,这次也算是系统的学了一下。不过我们的数据结构课程是以c语言为基础讲的。而我的c语言还一直停留在大一的阶段。所以又开始从头开始看c语言。由于学习了一段时间的java,也算是对编程有些许感觉,这次c语言的学习也算顺利。但是毕竟,作为高级语言的java比较简单,面向对象的思想也已深入头脑,对c语言有些不适应。所以也就开始找起一些共同点方便学习。基础语句不用说,主要是思想上的共通。面向对象与面向过程,我一直不完全理解其中的区别,我认为,这两个不应该是同等级的,面向对象应该是面向过程的一种封装,我认为是程序都必然要面向过程,因为程序执行的本身就是过程,这也是编程基础。而面向对象只不过将过程分块更为清晰,操作起来更加容易理解罢了(纯个人理解)。想到这里,我就有些明白c与java。java面向对象,无非是创建对象调用方法。这是一种编程模式。所以既然如此,c语言也一样可以实现这种功能。所以我开始找寻c语言编程中“面向对象”的相似之处。java中一切皆为对象,其方法也就是对这个对象的一种操作变化而已。c中,我认为这是一样的,在c语言中函数也不过是对自身某种变量的一些算法计算。而对这个“对象”的操作,也不过就是指针而已。这里我就开始想到一个把c语言模仿成java的一种方式(只是一种测试,实际编写中不必这样)。java的对象,我在c中就写成对应的结构体形式。而实际创建出即new出的对象,就对应成为结构体指针(new出对象即是给结构体分配内存空间)。而大家也知道c中不可以像java中把函数写在结构体里,那如何对应java中的方法么。对象中的方法,就是操作该对象本身的属性的。所以在c中完全可以在函数中传入结构体指针地址,来操作这个结构体里的“属性”。这样就跟这个结构体绑定了。就如同java中一个类的方法一样。通过这个思想,就可以很容易把已经习惯了的面向对象的思维转化到c语言中。当然我是c的初学者,还远远不知道c的博大精深。不过通过这种方法熟悉c的编写,进行快速入门我感觉还是十分不错的。

/**       JAVA       **/
class Studeng(){
       int num;      //学号
      public int getNum(){
           return  this.num;
      }
}


/**    C   **/
typedef struct Student{
    int num;
}Student;
……
Student *student;
……
int getNum(Student *student){
     int num=student->num;
     return num;
}

 这只不过是我学习c的一个思路,帮助我学习c语言。并不意味着c语言一定要想java那样编程。c语言的编程之路还有很长时间要走,想要学好,只能通过努力去大量的练习。加油!

     (以上文字纯是我自己的思路与想法,可能有些错误,甚至违背了一些c的编程理念,欢迎批评指正)

2014年9月 

      没想到这个两年前偶然想到的方法,现在却真实的用到了。当时只是为了让C语言可以按照java的模式编写一些简单的代码方便我使用习惯的面相对象的编程方式,才研究了通过传递指针来模拟“类与方法”的连接。结果最近学习python发现,python的类就是用这种方式来实现的,原以为是我自己想出来的一个小技巧没啥实际意义,结果竟然在一门成熟的语言中发现了,到时挺有成就感的!

猜你喜欢

转载自liguanyi11111.iteye.com/blog/1868596