结构体与指针_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;
}

八、

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

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

相关文章

陪玩圈子系统APP小程序H5,详细介绍,源码交付,支持二开!

陪玩圈子系统&#xff0c;页面展示&#xff0c;源码交付&#xff0c;支持二开&#xff01; 陪玩后端下载地址&#xff1a;电竞开黑陪玩系统小程序&#xff0c;APP&#xff0c;H5: 本系统是集齐开黑&#xff0c;陪玩&#xff0c;陪聊于一体的专业APP&#xff0c;小程序&#xff…

Linux进程通信——共享内存

概念 共享内存&#xff08;Shared Memory&#xff09;&#xff0c;指两个或多个进程共享一个给定的存储区。 特点 共享内存是最快的一种 IPC&#xff0c;因为进程是直接对内存进行存取。 因为多个进程可以同时操作&#xff0c;所以需要进行同步。 信号量共享内存通常结合在一…

Open3D (C++) 计算两点云之间的最小距离

目录 一、 算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、 算法原理 Open3D中ComputePointCloudDistance函数提供了计算从源点云到目标点云的距离的方法,计算点云的距离。也…

【C语法学习】26 - strcmp()函数

文章目录 1 函数原型2 参数3 返回值4 比较机制5 示例5.1 示例1 1 函数原型 strcmp()&#xff1a;比较str1指向的字符串和str2指向的字符串&#xff0c;函数原型如下&#xff1a; int strcmp(const char *str1, const char *str2);2 参数 strcmp()函数有两个参数str1和str2&a…

HCIP-四、MUX-vlanSuper-vlan+端口安全

四、MUX-vlan&Super-vlan端口安全 MUX-vlan实验拓扑实验需求及解法1. 在SW1/2/3分别创建vlan10 20 30 402. SW1/2/3之间使用trunk链路&#xff0c;仅允许vlan10 20 30 40 通过。3. SW与PC/Server之间使用access链路。4. ping验证&#xff1a; Super-vlan端口安全实验拓扑实…

【腾讯云云上实验室-向量数据库】腾讯云开创新时代,发布全新向量数据库Tencent Cloud VectorDB

前言 随着人工智能、数据挖掘等技术的飞速发展&#xff0c;海量数据的存储和分析越来越成为重要的研究方向。在海量数据中找到具有相似性或相关性的数据对于实现精准推荐、搜索等应用至关重要。传统关系型数据库存在一些缺陷&#xff0c;例如存储效率低、查询耗时长等问题&…

CentOS使用docker安装OpenGauss数据库

1.搜索OpenGauss docker search opengauss 2.选择其中一个源拉取 docker pull docker.io/enmotech/opengauss 3.运行OpenGauss docker run --name opengauss --privilegedtrue --restartalways -d -e GS_USERNAMEpostgres -e GS_PASSWORDmyGauss2023 -p 5432:5432 docker.…

黑马React18: ReactRouter

黑马React: ReactRouter Date: November 21, 2023 Sum: React路由基础、路由导航、导航传参、嵌套路由配置 路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 2. …

2023年中国高压驱动芯片分类、市场规模及发展趋势分析[图]

高压驱动芯片是一种能在高压环境下工作的集成电路&#xff0c;主要用于控制和驱动各种功率器件&#xff0c;如继电器、电磁阀、电机、变频器等。高压驱动芯片根据其输出电流的大小和形式可分为两类恒流型和开关型。 高压驱动芯片分类 资料来源&#xff1a;共研产业咨询&#x…

蓝桥杯算法双周赛心得——迷宫逃脱(记忆化搜索)

大家好&#xff0c;我是晴天学长&#xff0c;非常经典实用的记忆化搜索题&#xff0c;当然也可以用dp做&#xff0c;我也会发dp的题解&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .迷宫逃脱 迷官逃脱…

ubuntu操作系统中docker下Hadoop分布式前置环境配置实验

版本&#xff1a; centos7 hadoop 3.1.3 java JDK:1.8 集群规划&#xff1a; masterslave1slave2HDFS NameNode DataNode DataNode SecondryNameNode DataNode YARNNodeManager ResourceManage NodeManager NodeManager 1.docker容器&#xff1a; 把普通用户加入到docker组&am…

opencv-Canny 边缘检测

Canny边缘检测是一种经典的图像边缘检测算法&#xff0c;它在图像中找到强度梯度的变化&#xff0c;从而识别出图像中的边缘。Canny边缘检测的优点包括高灵敏度和低误检率。 在OpenCV中&#xff0c;cv2.Canny() 函数用于执行Canny边缘检测。 基本语法如下&#xff1a; edges…

本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)

按照固有思维方式&#xff0c;深度学习的训练环节应该在云端&#xff0c;毕竟本地硬件条件有限。但事实上&#xff0c;在语音识别和自然语言处理层面&#xff0c;即使相对较少的数据量也可以训练出高性能的模型&#xff0c;对于预算有限的同学们来说&#xff0c;也没必要花冤枉…

阿里云 ACK 新升级,打造智算时代的现代化应用平台

云布道师 今天&#xff0c;能想到的或是想不到的领域&#xff0c;对容器和 Kubernetes 的需求都居高不减&#xff0c;使这项技术正在真正走向无处不在。 在 2023 云栖大会上&#xff0c;阿里云云原生产品线容器服务负责人易立关于容器服务 ACK 在本届亚运会上应用的介绍&#…

在 VSCode 中使用 GDB 进行 C/C++ 程序调试(图文版)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

webpack loader

1、分类 2、执行顺序 配置类型 执行顺序是 loader1>loader2>loader3 3、使用方式 自己的第一个loader 同步loader /*** loader 就是一个函数* 当webpack 解释资源时&#xff0c; 会调用相应的loader去处理* loader 接收到文件内容作为参数&#xff0c;返回文件内容* p…

ios qt开发要点

目前关于ios qt的开发资料比较少&#xff0c;这里整理了几个比较重要的开发要点&#xff0c;基于MacOS14 Xcode15 Qt15.5 cmake iphone真机。 cmake报错&#xff0c;报错信息如下 CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (m…

CSM32RV003:国产高精度16位ADC低功耗RISC-V内核MCU

目录 高精度ADC工业应用工业数据采集应用CSM32RV003简介主要特性 高精度ADC工业应用 高精度ADC即高精度模数转换器&#xff0c;是一种能够将输入模拟信号转换为数字信号的芯片&#xff0c;在多种消费电子、工业、医疗和科研领域都有广泛应用。高精度ADC的主要特点是能够提供高…

深度学习图像修复算法 - opencv python 机器视觉 计算机竞赛

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

vue3引入vuex基础

一&#xff1a;前言 使用 vuex 可以方便我们对数据的统一化管理&#xff0c;便于各组件间数据的传递&#xff0c;定义一个全局对象&#xff0c;在多组件之间进行维护更新。因此&#xff0c;vuex 是在项目开发中很重要的一个部分。接下来让我们一起来看看如何使用 vuex 吧&#…