C语言指针数组实际应用(嵌入式)
C语言指针数组详细学习
指针是C语言中非常重要的概念之一,它可以让我们直接访问内存中的数据。指针数组则是由多个指针组成的数组,每个指针都可以指向内存中的某个位置。以下是一些指针数组的实际代码应用:
字符串数组
char* names[] = {"Alice", "Bob", "Charlie"};for (int i = 0; i < 3; i++) {printf("%s\\n", names[i]);
}
上述代码定义了一个字符串指针数组,其中每个指针都指向一个字符串常量。我们可以使用一个for循环遍历整个数组并打印出每个字符串。
函数指针数组
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int multiply(int a, int b) {return a * b;
}int (*operations[3])(int, int) = {add, subtract, multiply};int result = operations[0](3, 4); // result = 7
上述代码定义了一个函数指针数组,其中每个指针都指向一个接受两个int参数并返回int类型的函数。我们可以使用这个数组来动态选择要调用的函数。
指针数组作为结构体成员
typedef struct {char* name;int age;
} Person;Person people[3] = {{"Alice", 20},{"Bob", 25},{"Charlie", 30}
};char* names[3] = {"Alice", "Bob", "Charlie"};for (int i = 0; i < 3; i++) {people[i].name = names[i];printf("%s is %d years old\\n", people[i].name, people[i].age);
}
上述代码定义了一个包含指针数组成员的结构体。我们可以使用一个for循环遍历整个数组,并将每个Person对象的name成员指向一个字符串常量。
以上是一些指针数组的实际代码应用,希望对大家有所帮助。
在嵌入式开发中,C语言数组的应用非常广泛。
以下是一些嵌入式开发中常见的数组应用场景,以及相应的代码实例。
存储传感器数据
在嵌入式系统中,经常需要使用传感器来采集数据。我们可以使用数组来存储传感器采集到的数据,然后进行相应的处理。例如,以下代码演示了如何使用数组来存储温度传感器采集到的数据,并计算出平均值。
#define NUM_SAMPLES 10int temperature[NUM_SAMPLES] = {25, 26, 27, 28, 29, 30, 31, 32, 33, 34};int sum = 0;
for (int i = 0; i < NUM_SAMPLES; i++) {sum += temperature[i];
}int average = sum / NUM_SAMPLES;
存储配置信息
在嵌入式系统中,经常需要存储一些配置信息,例如网络地址、端口号、设备ID等等。我们可以使用数组来存储这些信息。例如,以下代码演示了如何使用数组来存储网络地址信息。
#define IP_ADDRESS_LENGTH 4unsigned char ip_address[IP_ADDRESS_LENGTH] = {192, 168, 1, 100};
存储字符数据
在嵌入式系统中,经常需要处理字符数据。我们可以使用字符数组来存储字符数据,并进行相应的处理。例如,以下代码演示了如何使用字符数组来存储一个字符串,并将其打印出来。
char message[] = "Hello, world!";
printf("%s\\n", message);
以下是一个使用指针在C语言中实现串口发送数据的示例代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>#define SERIAL_PORT "/dev/ttyUSB0" // 串口设备文件路径
#define BAUD_RATE B9600 // 串口波特率int main() {int fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY | O_NDELAY); // 打开串口设备文件if (fd == -1) {perror("open");exit(1);}struct termios options; // 串口选项tcgetattr(fd, &options); // 获取当前的串口选项cfsetispeed(&options, BAUD_RATE); // 设置输入波特率cfsetospeed(&options, BAUD_RATE); // 设置输出波特率options.c_cflag |= (CLOCAL | CREAD); // 必须设置的选项options.c_cflag &= ~PARENB; // 禁用奇偶校验options.c_cflag &= ~CSTOPB; // 设置停止位为1options.c_cflag &= ~CSIZE; // 清除字符长度选项options.c_cflag |= CS8; // 设置字符长度为8位options.c_cc[VTIME] = 0; // 设置读取超时时间options.c_cc[VMIN] = 1; // 设置读取最小字节数tcsetattr(fd, TCSANOW, &options); // 设置新的串口选项char message[] = "Hello, world!"; // 要发送的数据int length = strlen(message); // 数据长度int bytes_written = write(fd, message, length); // 发送数据if (bytes_written == -1) {perror("write");exit(1);}close(fd); // 关闭串口设备文件return 0;
}
上述代码使用Linux系统的termios库设置了串口的各种选项,并使用write函数发送了一条消息。
相关文章:
C语言指针数组实际应用(嵌入式)
C语言指针数组详细学习 指针是C语言中非常重要的概念之一,它可以让我们直接访问内存中的数据。指针数组则是由多个指针组成的数组,每个指针都可以指向内存中的某个位置。以下是一些指针数组的实际代码应用: 字符串数组 char* names[] {&q…...
常用的Java注解详解
Java是一种常用的编程语言,而注解是Java语言中非常重要的一部分。在这篇文章中,我们将介绍一些常用的Java注解,以及它们的作用和使用方法。 Override override注解是用于表示一个方法是被覆盖的。在Java中,如果子类要覆盖父类的方…...
华为OD机试题 - 第 K 个最小码值的字母(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:第 K 个最小码值的字母题目输入输出示例一输入输出说明示例一输…...

vscode环境配置(支持跳转,阅读linux kernel)
目录 1.卸载clangd插件 2.安装C插件 3. 搜索框内输入 “intell”,将 C_Cpp:Intelli Sense Engine 开关设置为 Default。 4.ubuntu安装global工具 5.vscode安装插件 6.验证是否生效 7.建立索引 1.卸载clangd插件 在插件管理中卸载clangd插件 2.安…...

zigbee学习笔记:IO操作
1、IAR新建工程 (1)Projetc→Create New Projetc→OK→选择位置,确定 (2)新建一个c文件,保存在路径中 (3)点击工程,右键→add→加入c文件 (4)…...
华为OD机试题 - 最少数量线段覆盖(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:最少数量线段覆盖题目输入输出示例一输入输出说明Code解题思路版…...

python趣味编程-2048游戏
在上一期我们用Python实现了一个盒子追逐者的游戏,这一期我们继续使用Python实现一个简单的2048游戏,让我们开始今天的旅程吧~ 在 Python 免费源代码中使用 Tkinter 的简单 2048 游戏 使用 Tkinter 的简单 2048 游戏是一个用Python编程语言编码的桌面游…...
求解完全背包问题
题目描述实现一个算法求解完全背包问题。完全背包问题的介绍如下:已知一个容量为 totalweight 的背包,有不同重量不同价值的物品,问怎样在背包容量限制下达到利益最大化。完全背包问题的每个物品可以无限选用背包问题求解方法的介绍如下&…...

我们为什么使用docker 优点 作用
1. 我们为什么使用Docker? 当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。 就好比我…...

Python每日一练(20230311)
目录 1. 合并两个有序数组 2. 二叉树的右视图 3. 拼接最大数 🌟 每日一练刷题专栏 C/C 每日一练 专栏 Python 每日一练 专栏 1. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为…...

202109-3 CCF 脉冲神经网络 66分题解 + 解题思路 + 解题过程
解题思路 根据题意,脉冲源的阈值大于随机数时,会向其所有出点发送脉冲 神经元当v>30时,会向其所有出点发送脉冲,unordered_map <int, vector > ne; //存储神经元/脉冲源的所有出点集合vector 所有脉冲会有一定的延迟&am…...
Aurora简介
Amazon Aurora是一种兼容MySQL和PostgreSQL的商用级别关系数据库,它既有商用数据库的性能和可用性(比如Oracle数据库),又具有开源数据库的成本效益(比如MySQL数据库)。 Aurora的速度可以达到MySQL数据库的…...

【python实操】用python写软件弹窗
文章目录前言组件label 与 多行文本复选框组件Radiobutton单选组件Frame框架组件labelframe标签框架列表框Listboxscrollbar滚动条组件scale刻度条组件spinbox组件Toplevel子窗体组件PanedWindow组件Menu下拉菜单弹出菜单总结针对组件前言 python学习之路任重而道远࿰…...

Ubuntu 常用操作
版本22.04 1、开启 root # 输入新密码 sudo passwd rootUbuntu以root账号登录桌面 默认情况是不允许用root帐号直接登录图形界面的。 Ubuntu 默认使用 GNOME,GNOME 使用 GDM 显示管理器。 为了允许以 root 身份登录到 GNOME,你需要对位于 /etc/…...

井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)
实例2:井字棋 井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏。井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向、或斜线方向连成一条…...

谷粒学院开发(三):统一日志、异常及前端准备工作
特定异常处理 ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) // 指定出现什么异常会被处理ResponseBody // 为了能够返回数据public R error(Exception e) {e.printStackTrace();return R.error().message("执行了全局异常…...
华为OD机试题 - 招聘(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:招聘题目输入输出示例一输入输出说明示例二输入输出说明示例三输…...
关于SQL优化的几点说明
1. ORACLE DBA是如何进行SQL优化的 作为一个Oracle数据库管理员(DBA),SQL优化是他们的日常工作之一,主要目标是优化查询性能,减少查询时间,并提高数据库的整体性能。 以下是Oracle DBA如何进行SQL优化的一般流程: 监控…...

使用高精度秒表StopWatch测试DateTime.Now的精度
StopWatch使用的命名空间:using System.Diagnostics;StopWatch的使用方法:创建Stopwatch对象:stopwatch;stopwatch计时表开启:stopwatch.Start();stopwatch计时表关闭:stopwatch.Stop();计算stopwatch.Stop…...

【C++】vector的使用及其模拟实现
这里写目录标题一、vector的介绍及使用1. vector的介绍2. 构造函数3. 遍历方式4. 容量操作及空间增长问题5. 增删查改6. vector二维数组二、vector的模拟实现1. 构造函数2. 迭代器和基本接口3. reserve和resize4. push_back和pop_back5. insert和erase5. 迭代器失效问题5. 浅拷…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...