C语言学习--类的模拟
2014-05-11 03:28
204 查看
在学习linux下编程时,不可避免的要学C了,下面先简单写写C下对C++中的类的模拟。
我们要用到的是 struct和函数指针,不懂的同学自行搜索这两个东东,我现在只写我的第一个实现,更多实现方式我会稍后补充。
首先先上代码:
首先我们先定义随便定义一个结构体,名称为Swen,在结构体内定义变量和函数指针,函数我们在结构体外实现,这里注意,函数如果要调用结构体内数据,我们就要传入本结构体的指针。
原本,我的代码是没有24行的这行代码的,后来编译没错,但运行时出现了“段错误”,因为指针指向的内存为空,为什么呢?我们发现23行代码已经执行,那么我们的问题就出现在这个函数上了。
为什么没法找到这个函数所指向的内存呢?因为如果没有第24行代码,结构体内的函数指针根本就什么都没有!第24行代码的意义就是将函数地址赋给结构体内的函数指针!
先整理那么多,剩下的后面再补充,欢迎各位大大指正。
我们要用到的是 struct和函数指针,不懂的同学自行搜索这两个东东,我现在只写我的第一个实现,更多实现方式我会稍后补充。
首先先上代码:
#include<stdlib.h> #include<stdio.h> struct Swen{ int number; char name; void (*test)(struct Swen* mythis); }; void test(struct Swen*); void test(struct Swen* mythis) { printf("Struct Swen's number:%d\n", mythis->number); printf("Struct Swen's name: %c\n", mythis->name); } int main(int argc, char* argv[]) { struct Swen s; s.number = 8; s.name = 'S'; printf("num name has been called.\n"); s.test = test; s.test(&s); }
首先我们先定义随便定义一个结构体,名称为Swen,在结构体内定义变量和函数指针,函数我们在结构体外实现,这里注意,函数如果要调用结构体内数据,我们就要传入本结构体的指针。
原本,我的代码是没有24行的这行代码的,后来编译没错,但运行时出现了“段错误”,因为指针指向的内存为空,为什么呢?我们发现23行代码已经执行,那么我们的问题就出现在这个函数上了。
为什么没法找到这个函数所指向的内存呢?因为如果没有第24行代码,结构体内的函数指针根本就什么都没有!第24行代码的意义就是将函数地址赋给结构体内的函数指针!
先整理那么多,剩下的后面再补充,欢迎各位大大指正。
相关文章推荐
- USB学习:C语言实现模拟对8bit数据的NRZI编码输出
- C语言模拟学生管理系统链表学习
- JNA调用C语言动态链接库学习实践总结(指针模拟)
- 黑马程序员-c语言学习之数组小结
- 使用 JNA 模拟C语言结构体的完整源代码
- 值得学习的C语言开源项目
- 学习笔记-有关C语言的指针的类型和本质
- C语言学习_面试加排序算法汇总
- 【学习ios之路:C语言】② 二维.三维数组.字符串数组的应用
- C语言学习笔记 lesson14 函数
- C语言:模拟实现memmove
- Linux下的C语言学习笔记(3)
- 最值得学习阅读的10个C语言开源项目代码
- 【C/C++开发】值得学习的C语言开源项目
- PCA人脸识别学习及C语言实现
- 写给初学者──如何学习C语言
- [学习心得][C语言scanf函数中%c的特点]
- IOS学习之—— Quartz 2D (C语言的框架)
- C语言学习心得一:__stdcall、__cdcel和__fastcall三者的区别
- c语言学习笔记二十六