结构体与指针_sizeof_static_extern_函数指针数组_函数指针_回调函数

一、结构体与指针

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#define up_to_down(uuu) (downdemo_t *)(uuu->beg)
#define __plc__
typedef struct updemo_s{
  uint8_t *head;
  uint8_t *beg;
  uint8_t *end;
}updemo_t;
typedef struct downdemo_s{
  uint8_t value;
  uint16_t type;
  uint8_t mmentry[0];
}downdemo_t;
typedef struct mmsg_s{
  uint8_t hh;
  uint8_t hhh;
}mmsg_t;
__plc__ int main(int argc, char* argv[])
{
  updemo_t *uu;
  downdemo_t *dd;
  mmsg_t *mm;
  uu=(updemo_t *)malloc(sizeof(updemo_t));
  uu->beg=malloc(sizeof(downdemo_t));
  dd=up_to_down(uu);
  dd->value=4;
  dd->type=8;
  mm=(mmsg_t *)dd->mmentry;
  mm->hh=10;
  mm->hhh=12;
  printf("dd->value: %d\n",dd->value);
  printf("dd->type: %d\n",dd->type);
  printf("mm->hh: %d\n",mm->hh);
  printf("mm->hhh: %d\n",mm->hhh);
  return 0;  
}

二、sizeof

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char* argv[])
{
  uint8_t a[1];
  uint8_t b[0];
  uint8_t *c;
  printf("a[1]: %ld a: %\n",sizeof(a));
  printf("b[0]: %ld\n",sizeof(b));
  printf("*c: %ld\n",sizeof(c));
  return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
int main(int argc,char* argv[])
{
  uint8_t a[1];
  uint8_t b[0];
  uint8_t *c;
  int *d;
  char e;
  int f;
  char g[]={"1234\0"};
  printf("a[0]: %d sizeof(a): %ld\n",a[0],sizeof(a));
  printf("b[0]: %d sizeof(b): %ld\n",b[0],sizeof(b));
  printf("*c: %d sizeof(c): %ld\n",*c,sizeof(c));
  printf("sizeof(d): %ld\n",sizeof(d));
  printf("sizeof(e): %ld\n",sizeof(e));
  printf("sizeof(f): %ld\n",sizeof(f));
  printf("sizeof(g): %ld\n",sizeof(g));
  return 0;
}

 

三、static

#include <stdio.h>
void func1(void);
static int count=10;
int main()
{
  while(count--){
    func1();
  }
  return 0;
}
void func1(void)
{
  static int thingy=5;
  thingy++;
  printf("thingy is %d ,count is %d\n",thingy,count);
}

四、extern

first.c


#include <stdio.h>

int count;
extern void write_extern();

int main()
{
  count=5;
  write_extern();
}

support.c

#include <stdio.h>

extern int count;

void write_extern(void)
{
  printf("count is %d\n",count);
}

五、函数指针数组

#include <stdio.h>
#include <stdlib.h>

int a()
{
  printf("\n1\n");
  return 1;
}
int b()
{
  printf("\n2\n");
  return 2;
}
int c()
{
  return 3;
}
int d()
{
  return 4;
}
int (*oper_func[])(void)={a,b,c,d};
int main()
{
  for(int i=0;i<4;i++){
    printf("i:%d  oper_func[i]:%d  *oper_func[i]:%d  oper_func[i]():%d\n",i,oper_func[i],*oper_func[i],oper_func[i]());
  }
}

六、函数指针

#include <stdio.h>

int (*p1)(int, int);
int max(int x, int y)
{
  return x > y ? x : y;
}

int main()
{
  int (*p2)(int, int)= max;
  p1=max;
  int a,b,c,d;
  printf("请输入三个数:");
  scanf("%d %d %d",&a, &b, &c);
  d=p1(p1(a,b),c);
  printf("p1最大的数d是:%d p1:%d\n",d,p1);
  printf("p2(p2(a,b),c):%d p2:%d\n",p2(p2(a,b),c),p2);
  return 0;
}

七、回调函数

#include <stdio.h>
#include <stdlib.h>

void populate_array(int *array, size_t arraySize, int(*getNextValue)(void))
{
  for(size_t i=0; i<arraySize;i++)
  {
    array[i]= getNextValue();
  }
}

int getNextRandomValue(void)
{
  return rand();
}

int main()
{
  int myarray[10];
  populate_array(myarray,10,getNextRandomValue);
  for(int i=0; i<10; i++)
  {
    printf("%d\n",myarray[i]);
  }
  return 0;
}

八、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/179145.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫HMAC加密案例:某企业信息查询网站

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly93d3cucWNjLmNvbS93ZWIvc2VhcmNoP2tleT0lRTQlQjglODclRTglQkUlQkUlRTklOUI…

基于PHP的动漫周边购物系统

有需要请加文章底部Q哦 可远程调试 基于PHP的动漫周边购物系统 一 介绍 此动漫周边购物系统系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。用户可注册登录&#xff0c;购物下单&#xff0c;评论等。管理员登录后台可对动漫周边商品&#xff0c;用户…

JVM中判断对象是否需要回收的方法

在堆里面存放着Java 世界中几乎所有的对象实例&#xff0c;垃圾收集器在对堆进行回收前&#xff0c;第一件事情就是要确定这些对象之中哪些还“ 存活 ” 着&#xff0c;哪些已经 “ 死去 ”。 引用计数算法 引用计数法是一种内存管理技术&#xff0c;它是通过对每个对象进行引用…

实现el-input-number数字框带单位

实现的效果展示&#xff0c;可以是前缀单位&#xff0c;也可以是后缀单位。实现的思路就是动态修改伪元素 ::before 和 ::after 的 content值 实现二次封装数字框的代码如下&#xff1a; <template><el-input-numberref"inputNumber"v-model"inputVal…

某60区块链安全之Call函数簇滥用实战二学习记录

区块链安全 文章目录 区块链安全Call函数簇滥用实战二实验目的实验环境实验原理实验内容实验步骤EXP利用 Call函数簇滥用实战二 实验目的 学会使用python3的web3模块 学会并区分以太坊call、staticcall、delegatecall三种函数调用的特点 找到合约漏洞进行分析并形成利用 实验…

linux CentOS7.6安装jenkins(小白版本)

前言 本人是一个前端开发者&#xff0c;由于有时候需要发版自己的东西&#xff0c;所以想搞一个Jenkins玩玩&#xff0c;看了网上好多教程&#xff0c;但是都不是针对小白的&#xff0c;比如linux怎么输入&#xff0c;怎么结束&#xff0c;自己也是搞了好久踩了好多坑 所以记录…

大数据预处理技术

文章目录 前言 大数据技术成为前沿专业 也是现在甚至未来的朝阳产业&#xff0c;大数据有分别是 数据预处理 数据存储 大数据处理和分析 数据可视化 部分组成 &#xff0c;大数据行业有数据则称王&#xff0c;大数据的核心是数据本身 怎么获取有价值的数据呢&#xff1f;本章讲…

七天.NET 8操作SQLite入门到实战 - 第三天SQLite快速入门

前言 今天我们花费一个小时快速了解SQLite数据类型、SQLite常用命令和语法。 七天.NET 8操作SQLite入门到实战详细教程 第一天 SQLite 简介第二天 在 Windows 上配置 SQLite环境 EasySQLite项目源码地址 GitHub地址&#xff1a;https://github.com/YSGStudyHards/EasySQLite&…

Cookie、Session、CBV加装饰器的三种方法

【0】cookie、session和Token的发展史 【1】Cookie的形式 存储形式&#xff1a;k&#xff1a;v键值对存储位置&#xff1a;客户端缺点&#xff1a;不安全&#xff0c;信息可能会泄露 【2】session的形式 标识符&#xff0c;表示我是当前用户加密出来的数据对敏感信息进行加密…

github访问失败

1. 问题场景 今天了解到notepad可以安装许多插件&#xff0c;但是自动下载插件时总是失败&#xff0c;这些插件的下载源都是github&#xff0c;将地址复制到浏览器也打不开&#xff0c;所以查了下github的访问问题&#xff0c;目前插件已正常下载。 2. 解决方法 gitee上搜索…

[项目管理-33/创业之路-87/管理者与领导者-127]:如何提升自己项目管理的能力和水平

目录 前言&#xff1a; 一、项目经理的角色定位 1.1 项目经理的职责 1.2 不同矩阵类型的项目&#xff0c;项目经理的职责 1.3 项目经理的角色定位 1.4 项目经理的发展路径 二、项目经理项目理论和知识结构 三、软件项目经理在计算机水平的提升 四、项目经理业务知识的…

基于JavaWeb+SSM+Vue家庭记账本微信小程序系统的设计和实现

基于JavaWebSSMVue家庭记账本微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1选题背景 互联网是人类的基本需求&#xff0c;特别是在现代社会&#xff0c;个人…

elasticsearch 7安装

问题提前报 max virtual memory areas error max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 如果您的环境是Linux&#xff0c;注意要做以下操作&#xff0c;否则es可能会启动失败 1 用编辑工具打开文件/etc/sysctl.conf 2 …

Eclipse常用设置-乱码

在用Eclipse进行Java代码开发时&#xff0c;经常会遇到一些问题&#xff0c;记录下来&#xff0c;方便查看。 一、properties文件乱码 常用的配置文件properties里中文的乱码&#xff0c;不利于识别。 处理流程&#xff1a;Window -> Preferences -> General -> Ja…

孟德尔随机化 MR入门基础-简明教程-工具变量-暴露

孟德尔随机化&#xff08;MR&#xff09;入门介绍和分章分享&#xff08;暂时不解读&#xff09; 大家好&#xff0c;孟德尔随机化大火&#xff0c;但是什么是孟德尔随机化&#xff0c;具体怎么实操呢 这没有其他教程的繁冗&#xff0c;我这篇讲最基础的孟德尔随机化的核心步…

洛谷 P4552 [Poetize6] IncDec Sequence

挺好的一道思维题。 分析 因为是对区间修改&#xff0c;多次修改肯定会超时&#xff0c;很容易想到差分。 那么原题的对区间修改就可以转换为下面三个操作&#xff08;均在差分数组中&#xff09;&#xff1a; 1. 任选一个数1 2. 任选一个数-1 3. 任选两个数1和-1 进一步考…

【JVM精讲与GC调优教程(概述)】

如何理解虚拟机(JVM)跨语言的平台 java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,他只关心“字节码”文件。 java不是最强大的语言,但是JVN是最强大的虚拟机。 不存在内存溢出? 内存泄露? JAVA = (C++)–; 垃圾回收机制为我们打理了很多繁琐的…

idea修改行号颜色

前言 i当idea用了深色主题后&#xff0c;发现行号根本看不清&#xff0c;或者很模糊 例如下面这样 修改行号颜色 在IntelliJ IDEA中&#xff0c;你可以根据自己的喜好和需求定制行号的颜色。下面是修改行号颜色的步骤&#xff1a; 打开 IntelliJ IDEA。 转到 “File”&…

机器视觉公司为什么宁愿高薪招新人,也不愿加薪留老员工?老员工特殊时间特殊照顾,新人必须常照顾

​职场常出现的“薪酬倒挂”现象。其实这是正常的职场规律&#xff0c;实际上是企业管理不得不面对的一种选择。 很多企业宁愿老员工离职也不加薪&#xff0c;却高薪请新员工&#xff1f;这就是职场上的鲶鱼效应&#xff0c;一些高层领导认为一个企业&#xff0c;老员工好比沙…

Redis入门指南学习笔记(3):Redis高级特性

一.前言 上一篇博客对Redis常用的数据结构进行了详细介绍。Redis除了丰富的数据类型支持&#xff0c;还包含许多高级特性&#xff0c;例如事务、内存驻留策略、排序、消息队列等&#xff0c;本文将对这些进行逐一介绍。 二.事务 Redis同样包含事务&#xff08;transaction&a…