CMalloc与结构体,其实就是C语言里面的new和类
Posted yongh701
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMalloc与结构体,其实就是C语言里面的new和类相关的知识,希望对你有一定的参考价值。
在本科以来,由于老师和自己的种种原因,我一直不知道结构体和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++定义完结构体和类,都不能像其他语言一样,这家伙很懒,什么都没有留下,记得打一个分号;不然编译的时候,整出一堆错误和警告足以让你抓狂,然而你其实就漏了个分号而已!
其实为何当初课本不两个东西一起说呢?一下子掌握两个概念。其实类也没什么的,也就是一堆东西的结合而已。
以上是关于CMalloc与结构体,其实就是C语言里面的new和类的主要内容,如果未能解决你的问题,请参考以下文章