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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值