C复习(主要复习)

指针和数组

  • 指针数组是一个数组,数组的每个元素都是指针。它适用于需要存储多个指针的场景,如字符串数组。
  • 数组指针是一个指针,指向一个数组。它适用于需要传递整个数组给函数或处理多维数组的场景。

 

函数指针:函数指针的定义需要指定函数的返回类型、参数列表以及指针的名称。

//return_type (*pointer_name)(argument_type1, argument_type2, ...);

  • return_type:函数返回值的类型。
  • pointer_name:函数指针的名称。
  • argument_type1, argument_type2, ...:函数参数的类型列表

 

 

 sizeof和指针与数组

Strlen和字符数组:

  • strlen函数:用于计算字符串的长度,不包括终止符\0。
  • 字符数组:用于存储字符串,必须以\0结尾。

 

库函数模拟实现手撕Memcopy:

void* my_memcpy(void* dest, const void* src, size_t n) {if (dest == nullptr || src == nullptr) {return nullptr;}char* d = static_cast<char*>(dest);const char* s = static_cast<const char*>(src);// 内存重叠检查if (d > s && d < s + n) {// 从后向前拷贝for (size_t i = n; i != 0; --i) {d[i - 1] = s[i - 1];}}else {// 正常从前向后拷贝for (size_t i = 0; i < n; ++i) {d[i] = s[i];}}return dest;
}

 实现Mommove:

void* my_memmove(void* destination, const void* source, size_t num) {// 如果源和目标指针相同,则无需移动if (destination == source) {return destination;}// 将void指针转换为char指针,以便逐字节操作char* dest = static_cast<char*>(destination);const char* src = static_cast<const char*>(source);// 如果源区域在目标区域之前或重叠,则从后向前复制if (src < dest && src + num > dest) {// 从后向前复制for (size_t i = num; i != 0; --i) {dest[i - 1] = src[i - 1];}}else {// 从前向后复制for (size_t i = 0; i < num; ++i) {dest[i] = src[i];}}return destination;
}

实现strstr 

char* my_strstr(const char* haystack, const char* needle) {// 如果needle是空字符串,根据标准定义,返回haystackif (*needle == '\0') {return const_cast<char*>(haystack);}// 获取主串和子串的长度size_t haystack_len = strlen(haystack);size_t needle_len = strlen(needle);// 如果子串长度大于主串长度,肯定找不到if (needle_len > haystack_len) {return nullptr;}// 遍历主串,寻找子串的起始位置for (size_t i = 0; i <= haystack_len - needle_len; ++i) {// 比较子串和主串的对应部分size_t j = 0;while (j < needle_len && haystack[i + j] == needle[j]) {++j;}// 如果整个子串都匹配,返回匹配的起始位置if (j == needle_len) {return const_cast<char*>(haystack + i);}}// 如果没有找到子串,返回nullptrreturn nullptr;
}

自定义类型:内存对齐:

 

大小端的判断:


bool isLittleEndian() {union {uint32_t i;unsigned char c[4];} u;u.i = 0x01020304;// 检查最低地址的字节是否为最低有效字节return (u.c[0] == 0x04);
}int main() {if (isLittleEndian()) {cout << "系统是小端字节序。" << endl;}else {cout << "系统是大端字节序。" << endl;}return 0;
}

解释

  • u.i被赋值为0x01020304
  • 如果系统是小端,u.c[0]将是0x04;如果是大端,u.c[0]将是0x01
  • 根据u.c[0]的值判断字节序。 

这次是对C中我还不清楚并且比较重要的知识进行总结,顺序可能会有点乱,还请见谅

 

 

 

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

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

相关文章

探索大语言模型(LLM):定义、发展、构建与应用

文章目录 引言大规模语言模型的基本概念大规模语言模型的发展历程1. 基础模型阶段&#xff08;2018年至2021年&#xff09;2. 能力探索阶段&#xff08;2019年至2022年&#xff09;3. 突破发展阶段&#xff08;以2022年11月ChatGPT的发布为起点&#xff09; 大规模语言模型的构…

5. k8s 之 pod原理与使用

Kubernetes Pod 原理详解 1. Pod 的部署方式 Pod 是 Kubernetes 的最小调度单元&#xff0c;其部署方式分为 声明式&#xff08;YAML&#xff09; 和 命令式&#xff08;kubectl&#xff09; 两种&#xff1a; (1) 声明式部署&#xff08;推荐&#xff09; 通过 YAML 文件定…

使用PyTorch实现目标检测边界框转换与可视化

一、引言 在目标检测任务中&#xff0c;边界框&#xff08;Bounding Box&#xff09;的坐标表示与转换是核心基础操作。本文将演示如何&#xff1a; 实现边界框的两种表示形式&#xff08;角点坐标 vs 中心坐标&#xff09;之间的转换 使用Matplotlib在图像上可视化边界框 验…

电影推荐及数据分析可视化系统(Python+Echarts+Mysql+Flask框架)

提升自己&#xff0c;掌握数据分析的能力&#xff0c;最快的方式就是实践&#xff01; 下面是对本项目的一些功能展示、介绍以及部分核心代码的展示,附项目系统展示的视频,制作不易如需完整代码后台私信我有偿获取! 一 、系统分析及功能介绍 1.系统分析 系统采用Python作为开发…

Android Jetpack Compose 高级开发核心技术

Android Compose 高级技术总结 1. 性能优化 1.1 状态管理优化 状态提升原则&#xff1a;将状态提升到共享的最近共同父组件derivedStateOf&#xff1a;当需要基于多个状态计算派生状态时使用 val scrollState rememberScrollState() val showButton by remember {derivedS…

Java堆结构深度解析:原理、实现与应用全指南

一、堆的核心概念体系 1. 堆的定义与性质 graph TBROOT((最大堆)) --> A[父节点 ≥ 子节点]ROOT --> B[完全二叉树结构]ROOT --> C[数组存储]ROOT --> D[快速获取极值] 2. 堆类型对比 类型特性典型应用场景最大堆父节点值 ≥ 子节点值获取前K大元素最小堆父节点…

SpringMVC学习(请求与响应。常见参数类型接收与响应。@RequestParam、@RequestBody的使用)(详细示例)

目录 一、请求与响应。(RequestMapping) &#xff08;1&#xff09;使用注解RequestMapping对业务模块区分。 StudentController。 TeacherController。 &#xff08;2&#xff09;Apifox请求与响应。 "/student/login"。 "/teacher/login"。 二、常见参数…

回溯算法+对称剪枝——从八皇后问题到数独问题(二)

引入&#xff1a; 本节我们进一步完善八皇后问题&#xff0c;学习剪枝、八皇后残局问题 进一步领会逻辑编程的概念&#xff0c;深入体会回溯算法&#xff0c;回顾上一节提到的启发搜索策略。 回顾&#xff1a; 八皇后问题&#xff1a;我们需要在一个空棋盘上放置 n 个皇后&a…

【玩泰山派】MISC(杂项)- 使用vscode远程连接泰山派进行开发

文章目录 前言流程1、安装、启动sshd2、配置一下允许root登录3、vscode中配置1、安装remote插件2、登录 **注意** 前言 有时候要在开发板中写一写代码&#xff0c;直接在终端中使用vim这种工具有时候也不是很方便。这里准备使用vscode去通过ssh远程连接泰山派去操作&#xff0…

【VsCode】设置文件自动保存

目录 一、前言 二、操作步骤 一、前言 VSCode中开启自动保存功能可以通过访问设置、修改settings.json文件、使用自动保存延迟功能来实现。这些方法能有效提升编程效率、避免数据丢失、实时同步更改。 二、操作步骤 在 Visual Studio Code (VS Code) 中设置自动保存功能非…

Adobe After Effects的插件--------Optical Flares之Options概述

Optical Flares插件的Options是对整个效果的组装和设置。点击该按钮会弹出一个组装室弹窗。 Options组装室就是对每个【镜头对象】进行加工处理,再将其组装在一起,拼凑成完整的光效。 接下来是我对组装室的探索: 面板 面板中有预览、堆栈、编辑和浏览按钮,其作用是调节窗…

如何用 esProc 补充数据库 SQL 的缺失能力

某些数据库 SQL 缺失必要的能力&#xff0c;通常要编写大段的代码&#xff0c;才能间接实现类似的功能&#xff0c;有些情况甚至要改用存储过程&#xff0c;连结构都变了。常见的比如&#xff1a;生成时间序列、保持分组子集、动态行列转换、自然序号、相对位置、按序列和集合生…

迷你世界脚本脚本常见问题

脚本常见问题 彼得兔 更新时间: 2024-05-22 17:54:44 在查阅开发者学院中的脚本API时&#xff0c;若有任何问题或建议&#xff0c;欢迎通过问卷进行反馈&#xff01;【点我填写问卷】 1.Block中的data在什么地方使用 data使用有具体需求,此处不建议开发者使用。开发者尽可能使…

四、Appium Inspector

一、介绍 Appium Inspector 是一个用于移动应用自动化测试的图形化工具&#xff0c;主要用于检查和交互应用的 UI 元素&#xff0c;帮助生成和调试自动化测试脚本。类似于浏览器的F12(开发者工具),Appium Inspector 的主要作用包括&#xff1a;‌ 1.‌检查 UI 元素‌ …

android11通过白名单卸载安装应用

目录 1.源码路径: 2.准备文件package.conf: 3.安装方法installPackagesLI 4.卸载方法deletePackageX 1.源码路径: frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java public static final String WHITELIST_PATH="/data/misc/pa…

qt mapFrom返回的QPoint和event->pos()区别和globalPos区别

mousePressEvent 和 eventFilter 里 event.pos 不一样&#xff0c;一定要注意 eventFilter里event.pos 直接返回相对于label左上角的坐标&#xff0c;就不要再mapFrom mousePressEvent 里event.pos 返回是相对于窗口左上角的坐标&#xff0c;需要用mapFrom返回label左上角的…

Hadoop四 Hive语法

一 数据库操作 Hive数据库操作&#xff0c;与MySql有很多都是一致的 创建数据库 create database if not exists myhive; use myhive;查看数据库详细信息 desc database myhive;数据库本质上就是在HDFS之上的文件夹&#xff0c;是一个以.db结尾的目录&#xff0c;默认存…

前端VUE框架理论与应用(10)

1、记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生。 2、要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。 3、注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push…

leetcode-单调栈26

关于单调栈的顺序总结&#xff1a; 寻找右边第一个比我大的&#xff1a;从左到右遍历&#xff0c;栈单调递减 寻找左边第一个比我小的&#xff1a;从左到右遍历&#xff0c;栈单调递增 寻找右边第一个比我小的&#xff1a;从右到左遍历&#xff0c;栈单调递增 寻找左边第一个比…

Linux:安装 CentOS 7(完整教程)

文章目录 一、简介二、安装 CentOS 72.1 虚拟机配置2.2 安装CentOS 7 三、连接远程服务器&#xff08;扩展&#xff09;3.1 获取虚拟机 IP 地址3.2 连接远程服务器 四、结语 一、简介 CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个基于 Linux 的…