c 结构体 & 函数指针模拟实现一个java class(类) 和方法
闲来无事,纯粹练习。
student.h
#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED #include <memory.h>
#include <stdlib.h> typedef struct _Student
{
char name[]; int sx; //数学
int yw; //语文
int yy; //英语
int wl; //物理
int hx; //化学
int sw; //生物 int (*avg)(struct _Student *); // 所有分数的加起来的平均分
int (*avg2)(struct _Student *); //数学, 语文, 英文加起来的平均分 } Student, *lpStudent; Student *student_init(); //初始化 #endif // STUDENT_H_INCLUDED
student.c
#include "student.h" // 所有分数的加起来的平均分
int avg(struct _Student *lpSelf)
{
return (lpSelf->sx + lpSelf->yw + lpSelf->yy + lpSelf->wl + lpSelf->hx + lpSelf->sw) / ;
} //数学, 语文, 英文加起来的平均分
int avg2(struct _Student *lpSelf)
{
return (lpSelf->sx + lpSelf->yw + lpSelf->yy) / ;
} //初始化
Student *student_init()
{
lpStudent lpStdt = (lpStudent) malloc(sizeof(Student));
memset(lpStdt, '\0', sizeof(Student)); lpStdt->avg = avg;
lpStdt->avg2 = avg2; return lpStdt;
}
test.c
int main(int argc, char *argv[])
{
Student *lpStdt = student_init();
lpStdt->sx = ;
lpStdt->yw = ;
lpStdt->yy = ;
lpStdt->wl = ;
lpStdt->hx = ;
lpStdt->sw = ; printf(" avg:%d\n", lpStdt->avg(lpStdt));
printf("avg2:%d\n", lpStdt->avg2(lpStdt)); return ;
}
输出的结果:
avg:35
avg2:20
c 结构体 & 函数指针模拟实现一个java class(类) 和方法的更多相关文章
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针
1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 struct stude ...
- C#将结构体和指针互转的方法
. 功能及位置 将数据从托管对象封送到非托管内存块,属于.NET Framework 类库 命名空间:System.Runtime.InteropServices 程序集:mscorlib(在 msc ...
- C语言结构体和指针
指针也可以指向一个结构体,定义的形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: struct stu{ char *name; //姓名 int num; //学号 ...
- 深入了解Windows句柄到底是什么(句柄是逻辑指针,或者是指向结构体的指针,图文并茂,非常清楚)good
总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解. ...
- 37深入理解C指针之---结构体与指针
一.结构体与指针 1.结构体的高级初始化.结构体的销毁.结构体池的应用 2.特征: 1).为了避免含有指针成员的结构体指针的初始化复杂操作,将所有初始化动作使用函数封装: 2).封装函数主要实现内存的 ...
- 【学习笔记】【C语言】指向结构体的指针
1.指向结构体的指针的定义 struct Student *p; 2.利用指针访问结构体的成员 1> (*p).成员名称 2> p->成员名称 3.代码 #include < ...
- C的结构体函数
#include<stdio.h> #include<string.h> struct Test { int age; ]; double score; }std1; //结构 ...
- 我写了一个java实体类,implements了Serializable接口,然后我如何让serialversionUID自动生成
写了一个java实体类,implements了Serializable接口,让serialversionUID自动生成方法: 1.点击类旁边的警告符号: 2.选择Add generated seria ...
- 高阶函数与接口混入和java匿名类
高阶函数与接口混入和java匿名类. 高阶函数中的组件(参量)函数相当于面向对象中的混入(接口)类. public abstract class Bird { private String name; ...
随机推荐
- idea 创建的spingmvc 引入jquery后jquery函数始终不执行的原因
- VMware与CentOS的安装与Linux简单指令
一 . VMware与CentOS系统安装 下载CentOS系统的ISO镜像 # 官方网站,国外网站,下载速度会很慢 www.centos.org # 由于国外的下载速度慢,我们可以使用国内的镜像源 ...
- WPF中如何为ItemsControl添加ScrollViewer并显示ScrollBar
今天在开发的过程中突然碰到了一个问题,本来的意图是想当ItemsControl中加载的Item达到一定数量时,会出现ScrollViewer并出现垂直的滚动条,但是实际上并不能够达成目标,对于熟手来说 ...
- Fabric运维从入门到精通
1. fabric的安装 在windows下的python3中安装fabric: 在python安装根目录下使用pip install fabric 安装 如图: fabric只支持python2不支 ...
- 四、K8S
一.查看日志 journalctl -xeu kubelet
- 三、oneinstack
一.介绍 oneinstack https://www.cnblogs.com/lxwphp/p/9231554.html
- SECCON 2014 CTF:Shuffle
很简单的一道小题 dia看一下是ELF文件 运行之: St0CFC}4cNOeE1WOS !eoCE{ CC T2hNto 是一串乱七八糟的字符 ida看一下: 很简单的逻辑 v5和v6是随机生成的两 ...
- MySQL 索引长度和区分度
首先 索引长度和区分度是相互矛盾的, 索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,但是索引也是要占内存的,所以我们需要找到一个平衡点: 那么这个平衡点怎么来定? 比如用户表有个字段 ...
- Android SDK Mirror
Android SDK Manager - Tools - Option - Proxy Settings - HTTP Proxy Server mirrors.zzu.edu.cn Force H ...
- Codeforces#543 div2 A. Technogoblet of Fire(阅读理解)
题目链接:http://codeforces.com/problemset/problem/1121/A 真·阅读理解 题意就是 有n个人 pi表示他们的强度 si表示他们来自哪个学校 现在Arkad ...