05C零碎语法

C零碎语法

目录

文章目录

  • C零碎语法
    • 1.函数指针
    • 2.回调函数
    • 3.数据拷贝
      • 3.1静态内存分配![请添加图片描述](https://img-blog.csdnimg.cn/direct/54d44e32bb7944f0866d4ca1e2667ce8.png)### 4.1动态内存分配
  • 字符串
    • 6.sizeof()和strlen()的区别
    • 7.strcpy()/strncpy()函数
      • 7.1**strcpy() 函数用于将一个字符串复制到另一个字符串中**
      • 7.2strncpy() 函数提供了一种更安全的方式来复制字符串

1.函数指针

#include <stdio.h>int max(int x, int y)
{return x > y ? x : y;
}int main(void)
{/* p 是函数指针 */int (* p)(int, int) = & max; // &可以省略int a, b, c, d;printf("请输入三个数字:");scanf("%d %d %d", & a, & b, & c);/* 与直接调用函数等价,d = max(max(a, b), c) */d = p(p(a, b), c); printf("最大的数字是: %d\n", d);return 0;
}

2.回调函数

函数指针作为某个函数的参数

以下是来自知乎作者常溪玲的解说:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
#include <stdlib.h>  
#include <stdio.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(void)
{int myarray[10];/* getNextRandomValue 不能加括号,否则无法编译,因为加上括号之后相当于传入此参数时传入了 int , 而不是函数指针*/populate_array(myarray, 10, getNextRandomValue);for(int i = 0; i < 10; i++) {printf("%d ", myarray[i]);}printf("\n");return 0;
}
typedef struct {int status;void (*statusChange)(int status);
} JT_Device;JT_Device gDevice;void addCallbackFunc(JT_Device *device, void (*pstatusChange)(int status)) {device->statusChange = pstatusChange;
}void run(JT_Device *device) {device->status = 10;if(device->status == 1) { // 假设这里是1而不是1eif(device->statusChange != NULL) {device->statusChange(device->status);}}
}// 用户代码
void callBack(int status) {printf("Callback:\n");printf("status = %d\n", status);
}int main() {addCallbackFunc(&gDevice, callBack);run(&gDevice);return 0;
}

3.数据拷贝

3.1静态内存分配请添加图片描述### 4.1动态内存分配

请添加图片描述## 5.二维数组做形参

#include <stdio.h>int getArrayData(int (*p)[4], int lines, int columns) //数组指针来接收二维数组的地址,行数,列数
{ int data;return data = *(*(p + lines) + columns);
}int main()
{int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};int data;data = getArrayData(array, 1, 1); //获取array[1][1]的值return 0;
}

字符串

6.sizeof()和strlen()的区别

char str[] = "hello";  //结尾有'\0'
sizeof(str);  //6,计算的是整个空间的长度
strlen(str);  //5,只计算有效字符,会忽略结尾的'\0'char *p = "hello";
sizeof(p);  //8,p是一个char *
strlen(p);  //5
sizeof(p) 返回的是指针变量 p 的大小(地址的大小),在64位系统上通常是8字节。 strlen(p) 返回的是指针 p 指向的字符串的长度(不包括结尾的 \0),对于 "hello" 这个字符串是5。

7.strcpy()/strncpy()函数

7.1strcpy() 函数用于将一个字符串复制到另一个字符串中

#include <stdio.h>
#include <string.h>int main() {char src[] = "Hello, World!";char dest[20];strcpy(dest, src); // 将src复制到destprintf("Destination: %s\n", dest);return 0;
}

注意
strcpy() 不检查目标数组的大小,如果目标数组不够大,可能会导致缓冲区溢出,这是一个常见的安全问题。
它在复制完所有字符后不会在目标字符串的末尾添加空字符 \0,所以它假定源字符串以 \0 结尾。

7.2strncpy() 函数提供了一种更安全的方式来复制字符串

允许你指定最大复制的字符数

#include <stdio.h>
#include <string.h>int main() {char src[] = "Hello, World!";char dest[20];strncpy(dest, src, 13); // 将src的前13个字符复制到dest// 确保字符串以空字符结尾dest[13] = '\0';printf("Destination: %s\n", dest);return 0;
}

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

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

相关文章

中继器、集线器、网桥、交换机、路由器和网关

目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.2 交换机 三、路由器、网关3.1 路由器3.2 网关 总结 前言 理解这些设备的关键是他们运行在不同的层次上。之所以存在不同层的问题&#xff0c;是因为不同的设备使用不同的信息来决定如何交换。在典…

【Hive SQL 每日一题】统计指定范围内的有效下单用户

文章目录 测试数据需求说明需求实现 前言&#xff1a;本题制作参考牛客网进阶题目 —— SQL128 未完成试卷数大于1的有效用户 测试数据 -- 创建用户表 DROP TABLE IF EXISTS users; CREATE TABLE users (user_id INT,name STRING,age INT,gender STRING,register_date STRING…

windows环境下重建oracle监听

由于某种原因导致数据库监听启动失败&#xff0c;需要重新创建监听。 过程如下&#xff1a; 第一步&#xff1a;修改 listenr.ora 文件 &#xff0c;增加新的监听配置 LISTENER4 (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST DESKTOP-BE6GDNT)(PORT 152…

2024春季期中测验-入门组 补题报告

文章目录 一、概况二、正解A.problem1 题目描述2 大体思路3 AC代码B.test1 题目描述2 大体思路3 AC代码C.horse1 题目描述2 大体思路3 AC代码D.expert1 题目描述2 大体思路3 AC代码三、总结一、概况 比赛名称:2024春季期中测验-入门组 日期:2024-5-18 二、正解 A.proble…

阿里云对象存储oss——对象储存原子性和强一致性

在阿里云对象存储oss中有俩个很重要的特性分别是原子性和强一致性。 原子性 首先我们先聊一下原子性&#xff0c;在计算机科学中&#xff0c;原子性&#xff08;Atomicity&#xff09;是指一个操作是不可分割的最小执行单元&#xff0c;要么完全执行&#xff0c;要么完全不执行…

外卖点餐系统 springboot+vue+element-ui

免费获取方式↓↓↓ 项目介绍038&#xff1a; http://localhost:8080/ 账号&#xff1a;weiguanke 123 系统登陆后展示 用户可视界面 – 登录页面 – 首页&#xff1a; – 店铺查找页面&#xff1a; 店铺查找 – 店铺页面 店铺管理者可视页面 – 店铺页面 店铺管理员…

如何将静态TCP/IP路由添加到Windows路由表?这里提供方法

序言 在某些特定类型的环境中,你可能会发现将静态路由添加到路由表中很有用。以下是如何在Windows 10和Windows 11中进行操作。 什么是路由表 路由表规定了所有数据包离开系统时的去向,无论该系统是物理路由器还是PC。包括内置在Windows PC中的路由器大多数路由器都使用某…

XCP协议系列介绍02-基于ASAP2 Tool-Set生成A2l介绍

本文框架 1. 前言2. ASAP2 Tool-Set系统介绍2.1 ASAP2 Creator介绍2.2 ASAP2 Updater介绍2.3 ASAP2 Merger介绍2.4 ASAP2 Comparer及Checker介绍2.5 ASAP2 Modifier介绍2.6 ASAP2 Studio介绍 3. 项目实操说明3.1 项目实操建议3.2 工具下载地址及使用 1. 前言 在XCP观测及标定整…

【计算机组成原理】1.1计算机的软硬件组成(记录学习计算机组成原理)

文章目录 1.早期的冯诺依曼机2.早期冯诺依曼机的基本运行框图3.早期冯诺依曼机的特点4.现代计算机的结构5. 小结 本次及以后有关于计算机组成原理的文章&#xff0c;旨在做学习时的记录和知识的分享。不论是应对期末考试&#xff0c;还是考研都是很有帮助的。希望大家多多支持更…

基于Android Studio 实现的鲜花(购物)商城App--原创

一、高质量源码&#xff08;非开源&#xff09; 关注公众号&#xff1a;《编程乐学》 后台回复&#xff1a;24060201 二、项目演示视频 基于Android Studio 实现的鲜花商城App--原创 三、开发环境 四、设计与实现 1.启动页 启动页我们需要用到倒计时和跳转功能。 2.注册登录 …

journalctl命令使用教程

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/139390890 文章目录 journalctl是什么journalctl的基础语法journalctl的常见命令总结 journalctl是什么 journalctl命令来自英文词组journal control的缩写&#xff0c;其功能是查看指定的日志信息。…

chat3-Server接收数据并转发给所有Client

本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端 服务端为当前客户端创建一个线程&#xff0c;此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端 一、Server: 1.1.Server端添加将消息转化给客户端的代码。有用集合保存输出流,…

AI 换装之OOTDiffusion

项目地址&#xff1a;https://github.com/levihsu/OOTDiffusion 试用地址&#xff1a;https://ootd.ibot.cn/ 本地部署 下载模型 git lfs安装, 然后国内源下载 git clone https://www.modelscope.cn/AI-ModelScope/clip-vit-large-patch14.git然后国内镜像手动下载 https://…

【面试题-009】线程的生命周期和状态

文章目录 java如何创建线程继承 Thread 类使用 Runnable 接口选择继承还是实现接口 线程池的核心参数和原理核心参数原理 为什么是先添加队列 队列满了在创建最大线程&#xff1f; 在 Java 中&#xff0c;线程的生命周期包括几个不同的状态&#xff0c;这些状态可以由线程的状态…

深入Netty RPC内核:编码、通信与性能优化全指南

1.Netty 简介 1.1. Netty的优势 Netty是一个异步的、事件驱动的网络应用框架&#xff0c;用于快速开发高性能、高可靠性的服务器和客户端程序。它提供了丰富的缓冲区类型和传输抽象&#xff0c;可以让您轻松地进行直接内存操作&#xff0c;减少拷贝和内存消耗。 1.2. Netty在…

学习小记录——python函数的定义和调用

今日小好运&#xff0c;未来有好运。&#x1f381;&#x1f496;&#x1fad4; 分享个人学习的小小心意&#xff0c;一起来看看吧 函数的定义 函数通常来说就是带名字的代码块&#xff0c;用于完成具体的工作&#xff0c;需要使用的时候调用即可&#xff0c;这不仅提高代码的…

[数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;159 标注数量(xml文件个数)&#xff1a;159 标注数量(txt文件个数)&#xff1a;159 标注类别…

音频信号分析与实践

音频信号分析与实践课程,方便理解音频信号原理和过程 1.音频信号采集与播放 两种采样模式和标准的采样流程 人说话的声音一般在2kHz一下&#xff1a; 采样频率的影响&#xff1a;采样率要大于等于信号特征频率的2倍&#xff1b;一般保证信号完整&#xff0c;需要使用10倍以上的…

『大模型笔记』FlashAttention技术细节介绍!

FlashAttention技术细节介绍! 文章目录 一. FlashAttention技术介绍1. 什么是闪存注意力(FlashAttention)?1.1 自注意力在序列长度方面是平方级的1.2 在现代GPU中,计算速度实际上已经超过了内存速度,因此瓶颈实际上是内存速度而不是计算速度1.3 闪存注意力是一种面向IO的精…

unity2020打包webGL时卡进程问题

我使用的2020.3.0f1c1&#xff0c;打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里&#xff0c;而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题&#xff0c;我尝试过一直卡在这里会如何&#xff0c;结果还真打包成功了。只是打包一个空场景需要20…