本帖最后由 xiaoye 于 2016-1-19 10:42 编辑
最近闭关自学java,在学的过程的发现很爽,当然也碰到过一下难点一点。
由于自学过C语言以及C++编程环境问题,都是分分钟解决的,在不懂,强大的中国网民,相信百度可以找到答案的。
而我感触较为深刻的是,在学习C语言的过程中,非常艰苦,但最终还是拿下它,虽说不能开发出绚丽的,功能强大的程序,但基本的编程思想和编码手法倒是学了很多,然而我我也想过用C语言结合API研究,可惜的是能用的能找到的资料非常少,还有就是微软平台上开发的机制和原理都不懂,于是学习完基础基本上都没闭关学习它的函数库。
前段时间,接触c++,发现c++独有的类,以及复杂的写法,等等之类的知识,学完后,发现这跟c语言非常相似。觉得它非常之复杂,然而在我接触java后,突然灵光一闪。
原来是这样,嗯,一种莫名的顿悟,使自己接受c++这种独特的风格,也心里觉得这是一件很自然的写法及写法的设计设计理念。
当然很多人看到这,懂得话肯定想说,c++的面向对象为什么不讲?其实当你认识它们后,你会发现,C语言也可以写面向对象的,比如,c++用类这种方式,但C语言就不能用函数吗?
函数嵌套,外面的函数就定义变量,将变量地址或引用到里面的函数,在用里面的写操作,这不是和类的一样的吗?只是样的写法在C语言中,调用和处理时候麻烦罢了。
因而别人说,学编程建议先学C语言,当然这不是强制一定。
为了丰满帖子,发了一段练习的代码,以示屌屌!
函数嵌套,外面的函数就定义变量,将变量地址或引用到里面的函数,在用里面的写操作,这不是和类的一样的吗?
这句话的解释:(代码没测试)
[C] 纯文本查看 复制代码
//C语言的写法
# include <stdio.h>
int rootA(int i, int k);
int rootB(int *i,int *k);
int main(void)
{
printf("%d",rootA(1,2);
return 0;
}
int rootA(int i, int k)
{
int i;
int k;
rootB(i,k);
return 0;
}
int rootB(int *i, int *k)
{
return (*i + *k);
}
[Java] 纯文本查看 复制代码
//java写法,没有初始化
class rootA{
int i;
int k;
int rootB()
{
return (i+k);
}
};
public class HK_student {
public static void main(String[] args){
rootA stu = new rootA();
System.out.printf("%d",stu.rootB());
}
}
补充:
事实上对知识点的理解上,我是理解清楚的,我想表达的意思是,他们的功能是实现两数相加,这是没问题的。我泪奔啊。
而在我理解JAVA,它有个类rootA里面有个方法rootB,rootB在内存上分配给代码区,两个变量分配给栈,重用方法,分配对象调用。
而c语言通过函数嵌套方式实现,同样的变量分配到栈,函数(忘记放哪了)类似于JAVA,说他们一样的(内存理解方面,上面的意思)不为过,这也是我写上面两段代码的原因。
但思想上的肯定是JAVA较为合理。最后我想说的是,他们的实现效果相同,同时也说明了c语言可以这样调用实现面向对象,如果真的让他面向对象,c语言本身都没有这本事,只能说类似,但可以使用自己动态分配内存,实现对象的方式,也是可以的。
避免误人子弟:
上面的理解:C语言的函数内嵌,java普通方法调用即可。
以上是一人的观点。
更正,2016年1月20日10:39:08:
上面红色部分改为:两变量分配到堆中。
C语言实现动态分配,可以使用函数malloc()
|