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

news2025/3/2 3:43:59

一、结构体与指针

#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;
}

八、

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCIE链路训练-状态机描述1

状态机描述 Config.linkwidth.start&#xff1a; 1. &#xff08;1&#xff09;Linkup 0 状态机没有执行链路宽度的升级&#xff08;upconfiguration of the Link width&#xff09;&#xff1a;那么tx会在所有active的dsp上发送TS1&#xff0c;其中link num为具体内容&a…

校园圈子论坛,交友,帖子内短视频,二手市场,APP小程序H5三端交付,源码交付,支持二开

校园圈子论坛&#xff0c;交友频道&#xff0c;商城&#xff0c;二手市场&#xff0c;活动专区&#xff0c;短视频&#xff0c;从校园生活的方方面面展现出了充满活力和创造力的镜头。这个频道是一个让学生们相互交流、结识新朋友的平台&#xff0c;不仅有交友功能&#xff0c;…

【Django-DRF】多年md笔记第5篇:Django-DRF的Request、Response和视图详解

本文从分析现在流行的前后端分离Web应用模式说起&#xff0c;然后介绍如何设计REST API&#xff0c;通过使用Django来实现一个REST API为例&#xff0c;明确后端开发REST API要做的最核心工作&#xff0c;然后介绍Django REST framework能帮助我们简化开发REST API的工作。 Dj…

『亚马逊云科技产品测评』活动征文|AWS 数据库产品类别及其适用场景详细说明

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 目录 前言、AWS 数据库产品类别 01、Amazon Aurora 02、Amazon Docum…

链表OJ--上

文章目录 前言一、反转链表二、移除链表元素三、链表中倒数第K个结点四、相交链表五、链表的中间结点 前言 一、反转链表 力扣206&#xff1a;反转链表- - -点击此处传送 思路图&#xff1a; 方法一&#xff1a;改变指向 方法二&#xff1a; 代码&#xff1a; //方法一 /…

逸学java【初级菜鸟篇】9.5枚举

hi&#xff0c;我是逸尘&#xff0c;一起学java吧 枚举是信息的标志和分类 当一个变量有几种固定可能的取值时&#xff0c;就可以将它定义为类型的枚举。 优点&#xff1a;代码可读性好&#xff0c;入参约束严谨&#xff0c;代码优雅&#xff0c;是最好的信息分类技术&#x…

基于STM32的数字图像处理与模式识别算法优化

基于STM32的数字图像处理与模式识别算法优化是一项涉及图像处理和机器学习领域的研究任务&#xff0c;旨在实现高效的图像处理和模式识别算法在STM32微控制器上的运行。本文将介绍基于STM32的数字图像处理与模式识别算法优化的原理和实现步骤&#xff0c;并提供相应的代码示例。…

php文件上传例子

目录结构&#xff1a; index.html代码&#xff1a; <!DOCTYPE html> <html><head><title>文件上传</title><meta charset"utf-8"></head><body><form action"./up.php" method"post" encty…

【中间件】服务化中间件理论intro

中间件middleware 内容管理 intro服务化middleware架构注册中心intro服务治理系统intro 本文主要intro服务化中间件的探讨 去年cfeng写了一篇博客走马观花般阐述了Spring Cloud下面的各种中间件&#xff0c;连深入使用都谈不上&#xff0c;只能说intro&#xff0c;在实际work中…

leetcode:520. 检测大写字母

一、题目&#xff1a; 链接&#xff1a;520. 检测大写字母 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a;bool detectCapitalUse(char* word) 二、思路&#xff1a; 本题较为简单&#xff0c;分为三种情况&#xff1a; 1.首字母大写&#xff0c;其余小写 2.首字…

Navmesh 寻路

用cocos2dx引擎简单实现了一下navmesh的多边形划分&#xff0c;然后基于划分多边形的a*寻路。以及路径拐点优化算法 用cocos主要是方便使用一些渲染接口和定时器。重点是实现的原理。 首先画了一个带有孔洞的多边形 //多边形的顶点数据Vec2(100, 100),Vec2(300, 200),Vec2(50…

Python Pyvis库详解:创建交互式网络图

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python Pyvis库详解&#xff1a;创建交互式网络图&#xff0c;文章4000字&#xff0c;阅读大约15分钟&#xff0c;大家enjoy~~ Pyvis是一个基于JavaScript库NetworkX的Pytho…

[开源]Web端的P2P文件传输工具,简单安全高效的P2P文件传输服务

一、开源项目简介 小鹿快传 - 在线P2P文件传输工具 小鹿快传是一款Web端的P2P文件传输工具&#xff0c;使用了WebRTC技术实现P2P连接和文件传输。 二、开源协议 使用MIT开源协议 三、界面展示 产品截图 四、功能概述 简单安全高效的P2P文件传输服务 小鹿快传是一款Web端…

80基于matlab的小波包熵与模糊C均值聚类的故障诊断,以凯斯西储大学轴承数据为例进行分析

基于matlab的小波包熵与模糊C均值聚类的故障诊断&#xff0c;以凯斯西储大学轴承数据为例进行分析。对数据进行小波包分解后重构&#xff0c;然后提取各频带能量分布&#xff0c;后计算小波包熵进行故障诊断。输出特征可视化结果。数据可更换自己的&#xff0c;程序已调通&…

Ps:背景橡皮擦工具抠图实例

背景橡皮擦工具 Background Eraser Tool由于是一个破坏性的工具&#xff08;直接删除像素&#xff09;而少被人使用。 其实&#xff0c;它不仅是一个功能强大的抠图工具&#xff0c;也是可以转换为非破坏性运用的。 原图&#xff08;注&#xff1a;图片来自网络&#xff09; 效…

[Unity+OpenAI TTS] 集成openAI官方提供的语音合成服务,构建海王暖男数字人

1.简述 最近openAI官方发布了很多新功能&#xff0c;其中就包括了最新发布的TTS语音合成服务的api接口。说到这个语音合成接口&#xff0c;大家可能会比较陌生&#xff0c;但是说到chatgpt官方应用上的聊天机器人&#xff0c;那个台湾腔的海王暖男的声音&#xff0c;可能就有印…

防爆智能安全帽、防爆手持终端,防爆智能矿灯守护安全,在煤矿安全生产远程可视化监管中的应用

煤矿安全新守护&#xff1a;如何通过防爆智能装备实现远程可视化监管 煤矿是国民经济的重要支柱产业&#xff0c;但长期以来&#xff0c;安全生产事故的频发一直是困扰煤矿行业发展的严峻问题。安全生产事故不仅危及矿工的生命安全&#xff0c;也对企业和地方经济造成了重大的…

SQL知多少?这篇文章让你从小白到入门

个人网站 本文首发公众号小肖学数据分析 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理和处理关系型数据库的编程语言。 对于想要成为数据分析师、数据库管理员或者Web开发人员的小白来说&#xff0c;学习SQL是一个很好的起点。 本文将为你提供一个…

VsCode学习

一、在VsCode 上编写第一个C语言 在VsCode上写代码都是先打开文件夹&#xff0c;这样也方便管理代码和编译器产生的可执行程序&#xff0c;VsCode生成的配置文件等。 1.1打开文件夹 写代码前&#xff0c;首先创立一个文件夹存储以后我们写的VsCode代码&#xff0c;便于管理。…

redis的性能管理及集群架构(主从复制、哨兵模式)

一、redis的性能管理 1、内存指标info memory 内存指标&#xff08;重要&#xff09; used_memory:853736 数据占用的内存 used_memory_rss:10551296 redis向操作系统申请的内存 used_memory_peak:853736 redis使用内存的峰值 注&#xff1a;单位&#xff1a;字节 系…