在学习linux下编程时,不可避免的要学C了,下面先简单写写C下对C++中的类的模拟。
我们要用到的是 struct和函数指针,不懂的同学自行搜索这两个东东,我现在只写我的第一个实现,更多实现方式我会稍后补充。
首先先上代码:
1 #include<stdlib.h> 2 #include<stdio.h> 3 4 struct Swen{ 5 int number; 6 char name; 7 void (*test)(struct Swen* mythis); 8 }; 9 10 void test(struct Swen*); 11 void test(struct Swen* mythis) 12 { 13 14 printf("Struct Swen's number:%d ", mythis->number); 15 printf("Struct Swen's name: %c ", mythis->name); 16 } 17 18 int main(int argc, char* argv[]) 19 { 20 struct Swen s; 21 s.number = 8; 22 s.name = 'S'; 23 printf("num name has been called. "); 24 s.test = test; 25 s.test(&s); 26 }
首先我们先定义随便定义一个结构体,名称为Swen,在结构体内定义变量和函数指针,函数我们在结构体外实现,这里注意,函数如果要调用结构体内数据,我们就要传入本结构体的指针。
原本,我的代码是没有24行的这行代码的,后来编译没错,但运行时出现了“段错误”,因为指针指向的内存为空,为什么呢?我们发现23行代码已经执行,那么我们的问题就出现在这个函数上了。
为什么没法找到这个函数所指向的内存呢?因为如果没有第24行代码,结构体内的函数指针根本就什么都没有!第24行代码的意义就是将函数地址赋给结构体内的函数指针!
先整理那么多,剩下的后面再补充,欢迎各位大大指正。