zoukankan      html  css  js  c++  java
  • C语言学习--类的模拟

    在学习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行代码的意义就是将函数地址赋给结构体内的函数指针!

    先整理那么多,剩下的后面再补充,欢迎各位大大指正。

  • 相关阅读:
    JZOJ3404[NOIP2013模拟]卡牌游戏(2019.08.04[NOIP提高组]模拟 B 组T2)
    JZOJ3403[NOIP2013模拟]数列变换(2019.08.04[NOIP提高组]模拟 B 组T1)
    Luogu1169BZOJ1057[ZJOI2007]棋盘制作
    BZOJ1867[Noi1999]钉子和小球
    Luogu2524 Uim的情人节礼物
    error: Failed dependencies:解决
    Android 通知 相关api记录
    LitePal 之 DatabaseGenerateException
    Button重写onClick两种方式
    【洛谷3948】数据结构
  • 原文地址:https://www.cnblogs.com/Rapheal/p/3721318.html
Copyright © 2011-2022 走看看