【C】Malloc与结构体,其实就是C语言里面的new和类

来源:互联网 发布:怎么看淘宝的总消费 编辑:程序博客网 时间:2024/05/10 10:14

在本科以来,由于老师和自己的种种原因,我一直不知道结构体和Malloc是什么,每当考试的时候,尤其是数据结构和操作系统考试的时候,我就会对着诸如《【C】利用单链表数据结构实现通讯录,链表的增删改查》(点击打开链接)代码背啊背,然后考试默啊默,一直对于这复杂的结构体和malloc不明所以。学C语言的时候,老师说结构体不用看了,考试重点考到指针和数组,学数据结构的时候,老师会上机,我从课本会抄就行了。于是毕业之后,根本不会写C语言,于是Malloc与结构体一直云里雾里,纵使已经打了足够多的class和new了。

知道今天重新回头看,突然恍然大悟,其实根本就不应该将类和结构体,new与malloc割裂开来,因为他们本来就是同一门家子的!

比如如下的C++代码,很简单,估计学这门面向对象语言的时候,无论你能够找到对象,都知道是什么意思。

#include<iostream>#include<string>using namespace std;class Student{public: int S_no;string S_name;};int main(){Student* s=new Student();s->S_no=1;s->S_name="学生";cout<<"学号:"<<s->S_no<<",姓名:"<<s->S_name<<"。"<<endl;return 0;}
是的,因为上面这段代码,就是类的入门,运行结果也正如你想的这样:


我定义了一个叫Student的类,给里面的s_no和s_name赋值,然后通过直接访问里面变量的方式,将他们打印出来。

其实,上面的代码,完全可以用没有类的C语言来实现,你不介意,完全可以像我理解printf和cout一样,其实就是在c语言和c++的两个写法,管他里面的结构是啥,哥只知道他们的功能,会用就好了:

#include<stdio.h>#include <malloc.h>struct Student{int S_no;char* S_name;};//部分人这里还用类似如下的typedef结构,避免以后提到struct Student都要打这么长的东西,打Student就好了/*typedef struct Student{int S_no;char* S_name;}Student;*/int main(){struct Student *s=(struct Student *)malloc(sizeof(struct Student));//写得这么长,实际上就是为了new一个名为s结构体s->S_no=1;//C语言照样可以用->来访问结构体,课本就这样写的s->S_name="学生";printf("学号:%d,姓名:%s。\n",s->S_no,s->S_name);return 0;}
运行结果还是同上,尤其注意主函数,一开始长得鸡肠一样的东西,其实就是一个new而已。

上述代码其实就是说明了,Malloc与结构体,其实就是C语言里面的new和类。不同的表达而已!这里就不扯这么多malloc其实是开辟空间甚甚甚之类的,这么长篇幅的说明文档和课本说明有个P用,你还不如一个例子,让人家直接会用的得了。

其中注意:

1、C语言中,结构体不能定义函数,但你可以定义函数指针啊,完美与类的成员联系起来啊

2、C语言中的结构体没有public、private、protected这些东东的,而C++类是有的,默认还是private不能直接访问的。

3、无论是C语言和C++定义完结构体和类,都不能像其他语言一样,这家伙很懒,什么都没有留下,记得打一个分号;不然编译的时候,整出一堆错误和警告足以让你抓狂,然而你其实就漏了个分号而已!

其实为何当初课本不两个东西一起说呢?一下子掌握两个概念。其实类也没什么的,也就是一堆东西的结合而已。

0 0
原创粉丝点击