当前位置: 首页 > news >正文

自学嵌入式 day 16-c语言-第10章 指针

14 指针函数

        返回值是指针的函数。

(1)动态内存分配

①使用方式:

#include<stdlib.h>

void *malloc(size_t size)

②返回连续的内存空间的首元素地址,内存空间未被初始化,申请的是堆区的空间。

③内存空间申请失败会返回空指针。

④释放函数:不能多次使用。

void *free(void *stc)

⑤用指针承载函数返回值时,不能改变指针的值。

⑥realloc (void *stc,size_t size)----重开size大小的空间。

int main(void)

{

        int *p;

        int n = 10;

        p = malloc(n * sizeof(int));

        if(p != NULL)

        {

                int i;

                for(i = 0;i < n;++i)

                 {

                        p[i] = i + 1;

                }

                for(i = 0;i < n;++i)

                {

                        printf("%d\n", p[i]);

                }

         }

        free(p);

        return 0;

}

15 指针函数

定义:类型标识符(*p)(形参表列);p = 函数名;

(1)函数名为函数的入口地址。

(2)定义指针和函数的类型和形参一致。

(3)降低程序代码的耦合性。

算法:回调函数:

int div2(int n)
{
    return n % 2 == 0;
}
 

void printArray(int *s,int len,int (*pfn)(int))
{
    int i ;
    for(i = 0;i < len;++i)
    {
        if(pfn(s[i]))
        {
            printf("%d\n",s[i]);
        }
    }
}

int main(void)
{
    double s[] = {1.1,2,3.3,4,5,-6,7,8,9,0};
    int len = sizeof(s) / sizeof(s[0]);

    printArray(s,len,div2);
    return 0;
}

考题:程序传入到0x30001000处执行代码

void (*pfn)(void);

pfn = ((void *)(void))0x30001000;

16 指针数组

(1)一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一
个元素都相当于一个指针变量。一维指针数组的定义形式为

类型名*数组名[数组长度];

(2)数组元素都是字符串首地址

char *s[] = {"china","hello","world"};

17 指针的指针

char **p;//char *--基类型,*---类型说明符,表示是个指针

        可用与在被调函数中改变主调函数中指针中的地址。

void swap(char **a,char **b)
{
    char *t;
    t = *a;
    *a = *b;
    *b = t;
}

void reverseString(char **s,int len)
{
    int i;
    for(i = 0;i < len / 2;++i)
    {
        swap(&s[i],&s[len - i - 1]);
    }
}

考点:

        编译无问题,运行程序崩溃,原因为函数调用时指针是值传递,无法从被调函数修改主调函数中指针的地址。

注:

(1)二维数组作为函数参数,形参为指向数组的指针。

(2)指针数组作为函数参数,形参为指向指针的指针。

练习:

(1)编写程序实现单词的倒置
        "how are you" -> "you are how"

#include<stdio.h>

#include<string.h>

int countera(char *s)//统计单词个数
{
    int i = 0;
    while( *s != '\0')
    {
        if(*s == ' ')
        {
            ++i;
        }
        ++s;
    }
    return i + 1;
}

int sum(char *s)//统计单词长度
{
    int i = 0;
    while(s[i] != ' ' && s[i] != '\0')
    {
        ++i;
    }
    return i + 1;
}
void write(char **p,char *s,int n)//将每个单词的首字母地址装入指针数组中
{
    p[0] = s;
    int i;
    for(i = 1;i < n;++i)
    {
        p[i] = p[i - 1] +sum(p[i - 1]);
    }
}

void reverse(char **p,int n)//逆序
{
    int i;
    for(i = 0;i < n / 2;++i)
    {
        char *t;
        t = p[i];
        p[i] = p[n - i - 1];
        p[n - i - 1] = t;
    }
}

void Strcat(char *a,char *p)//连接
{
    int i = 0;
    while(a[i] != '\0')
    {
        ++i;
    }
    a[i++] = ' ';
    int j = 0;
    while(*(p + j) != ' ' && *(p + j) != '\0')
    {
        a[i] = *(p + j);
        ++j;
        ++i;
    }
    a[i] = '\0';
}

int main(void)
{
    char s[100] = "how old are you";
    int n = countera(s);
    char  *p[n];
    char a[100] = {0};
    write(p,s,n);
    reverse(p,n);
    strcpy(a,p[0]);
    int i ;
    for(i = 1;i < n;++i)
    {
        Strcat(a,p[i]);
    }
    if(a[strlen(a) - 1] == ' ')
    {
        a[strlen(a) - 1] = '\0';
    }
    puts(a);
    return 0;
}

相关文章:

自学嵌入式 day 16-c语言-第10章 指针

14 指针函数 返回值是指针的函数。 &#xff08;1&#xff09;动态内存分配 ①使用方式&#xff1a; #include<stdlib.h> void *malloc(size_t size) ②返回连续的内存空间的首元素地址&#xff0c;内存空间未被初始化&#xff0c;申请的是堆区的空间。 ③内存空间申请…...

DataWorks快速入门

文章目录 一、DataWorks简介1、概念2、功能3、优势 二、DataWorks使用1、创建工作空间2、绑定计算资源3、数据开发 三、DataWorks节点类型1、MaxCompute SQL节点①创建非分区表并插入数据②创建分区表并插入数据③查询表数据 2、离线同步节点3、PYODPS 3节点①判断表是否存在②…...

AtCoder Beginner Contest 404 A-E 题解

还是ABC好打~比ARC好打多了&#xff08; 题解部分 A - Not Found 给定你一个长度最大25的字符串&#xff0c;任意输出一个未出现过的小写字母 签到题&#xff0c;map或者数组下标查询一下就好 #include<bits/stdc.h>using namespace std;#define int long long #def…...

WiFi出现感叹号上不了网怎么办 轻松恢复网络

在日常生活中&#xff0c;WiFi已成为不可或缺的一部分。然而&#xff0c;有时我们会遇到WiFi图标上出现了感叹号&#xff0c;无法上网。无论是办公、学习还是娱乐&#xff0c;这种情况都会严重影响体验。这种情况该怎么解决呢&#xff1f;本期驱动哥就给各位介绍几种简单的解决…...

M0芯片的基础篇Timer

一、计数器的原理 加法计数器 减法计数器 触发中断 最短计时时间 时钟周期决定 16bit 65535 最长计时时间 时间周期和最大计数值决定 二、syscfg配置 timg&#xff1a;通用定时器 tima&#xff1a;高级定时器 timx&#xff1a;不论是高级定时器还是通用定时器都是一样…...

vue教程(vuepress版)

Vue 完全指南 项目介绍 这是一个系统化的 Vue.js 学习教程&#xff0c;采用循序渐进的方式&#xff0c;帮助开发者从零开始掌握 Vue 开发技能。 教程特点 循序渐进: 从 Vue 基础概念开始&#xff0c;逐步深入到高级特性&#xff0c;适合不同层次的开发者学习实战驱动: 结合…...

【嵌入式开发-USB】

嵌入式开发-USB ■ USB简介 ■ USB简介...

【前端】webstorm运行程序浏览器报network error

是浏览器阻止了链接&#xff0c;先把能正常访问的链接搜索&#xff0c;禁止访问的时候&#xff0c;高级&#xff0c;强制访问&#xff0c;再运行项目生成的网址就可以了。...

国内led显示屏厂家以及售后 消费对比与选择

国内led显示屏的厂家有很多&#xff0c;虽然让消费者在选择的时候有了多种的机会&#xff0c;可是在质量方面的鉴别上也是无从下手。对此为了方便消费者作出选择&#xff0c;下面为您推荐一些品牌厂家。 1、强力巨彩 是全球比较有名气的LED显示屏厂家的制造商&#xff0c;总厂房…...

【Go】优化文件下载处理:从多级复制到零拷贝流式处理

在开发音频处理服务过程中&#xff0c;我们面临一个常见需求&#xff1a;从网络下载音频文件并保存到本地。这个看似简单的操作&#xff0c;实际上有很多优化空间。本文将分享一个逐步优化的过程&#xff0c;展示如何从一个基础实现逐步改进到高效的流式下载方案。 初始实现&a…...

驱动开发硬核特训 · Day 30(上篇):深入理解 I2C 总线驱动模型(以 at24 EEPROM 为例)

作者&#xff1a;嵌入式Jerry 视频教程请关注 B 站&#xff1a;“嵌入式Jerry” 一、写在前面 在上一阶段我们已经深入理解了字符设备驱动与设备模型之间的结合方式、sysfs 的创建方式以及平台驱动模型的实际运用。今天我们迈入总线驱动模型的世界&#xff0c;聚焦于 I2C 总线…...

LaTeX印刷体 字符与数学符号的总结

1. 希腊字母&#xff08;Greek Letters&#xff09; 名称小写 LaTeX大写 LaTeX显示效果Alpha\alphaAαα, AABeta\betaBββ, BBGamma\gamma\Gammaγγ, ΓΓDelta\delta\Deltaδδ, ΔΔTheta\theta\Thetaθθ, ΘΘPi\pi\Piππ, ΠΠSigma\sigma\Sigmaσσ, ΣΣOmega\omeg…...

关键字where

C# 中的 where 关键字主要用在泛型约束&#xff08;Generic Constraints&#xff09;中&#xff0c;目的是对泛型类型参数限制其必须满足的条件&#xff0c;从而保证类型参数具备特定的能力或特性&#xff0c;增强类型安全和代码可读性。 约束写法说明适用场景举例C#版本要求w…...

vite 代理 websocket

&#x1f6e1;️一、WebSocket 基本概念 名称全称含义使用场景ws://WebSocket非加密的 WebSocket 连接开发环境、内网通信wss://WebSocket Secure加密的 WebSocket 连接&#xff08;基于 TLS/SSL&#xff09;生产环境、公网通信 &#x1f6e1;️二、安全性对比 特性ws://wss…...

深入理解操作系统:从基础概念到核心管理

在计算机系统中&#xff0c;操作系统是至关重要的组成部分&#xff0c;它如同计算机的“大管家”&#xff0c;统筹协调着系统的各项资源与工作流程。接下来&#xff0c;就让我们深入了解操作系统的奥秘。 一、操作系统概述 操作系统能有效组织和管理系统中的软/硬件资源&…...

手撕基于AMQP协议的简易消息队列-1(项目介绍与开发环境的搭建)

项目绍 码云仓库&#xff1a;MessageQueues: 仿Rabbit实现消息队列 文章概要 本文将介绍从零搭建一个简易消息队列的方法&#xff0c;目的是了解并学习消息队列的底层原理与逻辑&#xff0c;编写一个独立的服务器程序。从搭建开发环境开始&#xff0c;到编写一些工作组件&am…...

C++ 模板方法模式详解与实例

模板方法模式概念​ 模板方法模式(Template Method Pattern)属于行为型设计模式,其核心思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样可以使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。它通过继承机制,实现代码复用和行为…...

北京丰台人和中医院,收费贵吗?

北京丰台人和中医院&#xff0c;收费贵吗&#xff1f; 北京丰台人和中医院属于平价医院&#xff0c;百姓医院&#xff0c;收费不贵&#xff0c;北京丰台人和中医院35年专业看肝病&#xff0c;之所以能够在肝病感染者中赢得广泛好评&#xff0c;离不开其严谨的医疗流程、专业的…...

21、魔法传送阵——React 19 文件上传优化

一、魔法传送阵的核心法则 1.量子切割术&#xff08;分片上传&#xff09; const sliceFile (file) > {const chunks [];let start 0;const CHUNK_SIZE 2 * 1024 * 1024; // 2MB分片while (start < file.size) {chunks.push({id: ${file.name}-${start},data: file.s…...

Windows命令行软件管理器:Chocolatey

文章目录 Windows命令行软件管理器&#xff1a;Chocolatey1.Chocolatey使用1.1 安装1.2 常用命令1.3 使用流程 2.常用shell命令汇总 Windows命令行软件管理器&#xff1a;Chocolatey Chocolatey 是一款强大的 Windows 命令行软件管理器&#xff0c;目前在 GitHub 上已斩获 10.…...

【MySQL】第二弹——MySQL表的增删改查(CRUD)

文章目录 &#x1f393;一. CRUD&#x1f393;二. 新增(Create)&#x1f393;三. 查询(Rertieve)&#x1f4d6;1. 全列查询&#x1f4d6;2. 指定列查询&#x1f4d6;3. 查询带有表达式&#x1f4d6;4. 起别名查询(as )&#x1f4d6; 5. 去重查询(distinct)&#x1f4d6;6. 排序…...

Windows环境,Python实现对本机处于监听状态的端口,打印出端口,进程ID,程序名称

1、pip install tabulate 2、代码实现 #!/usr/bin/env python # -*- coding: utf-8 -*-""" Windows端口监听程序 显示本机处于监听状态的端口&#xff0c;进程ID和程序名称 """import subprocess import re import os import sys from tabulat…...

什么是变量提升?

变量提升&#xff08;Hoisting&#xff09; 是 JavaScript 引擎在代码执行前的一个特殊行为&#xff0c;它会将变量声明和函数声明自动移动到当前作用域的顶部。但需要注意的是&#xff0c;只有声明会被提升&#xff0c;赋值操作不会提升。 ​​核心概念​​ 变量声明提升&…...

Java大师成长计划之第15天:Java线程基础

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在现代软件开发中&#xff0c;多线程…...

中小企业设备预测性维护:从技术原理到中讯烛龙实践落地指南

在工业 4.0 与智能制造浪潮的推动下&#xff0c;中小企业正面临设备管理模式的深刻变革。传统的事后维修与预防性维护策略&#xff0c;因缺乏数据驱动与智能决策能力&#xff0c;已难以满足企业降本增效的核心诉求。据 Gartner 统计&#xff0c;非计划停机导致的生产损失平均每…...

mysql 复习

mysql定义与架构 数据库是按照数据结构来组织、存储和管理数据的仓库&#xff0c;方便我们增删查改。MySQL有客户端和服务器端&#xff0c;基于网络服务的&#xff0c;3306端口处于监听状态。 数据库的存储介质有以下两种&#xff1a; 磁盘&#xff0c;比如MySQL就是一种磁盘…...

高低比率策略

本策略的核心在于运用技术指标结合基本规则进行交易决策&#xff0c;旨在通过高低比率策略捕捉市场的超买和超卖信号&#xff0c;以此指导交易行为。 一、交易逻辑思路 1. 指标计算&#xff1a; - 本策略首先通过EMA&#xff08;指数移动平均&#xff09;计算快线和慢线的值&am…...

python线上学习进度报告

一、mooc学习 二、python123学习...

深入剖析ThreadLocal:原理、应用与最佳实践

深入剖析ThreadLocal&#xff1a;原理、应用与最佳实践 一、ThreadLocal的本质与价值 1.1 什么是ThreadLocal&#xff1f; ThreadLocal是Java提供的线程本地变量机制&#xff0c;允许每个线程拥有独立的变量副本&#xff0c;实现线程间的数据隔离。它通过“空间换时间”的方式…...

nginx 配置后端健康检查模块

nginx自带的针对后端节点健康检查的功能比较简单,通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的参数来完成,当后端节点出现故障时,自动切换到健康节点来提供访问。但是nginx不能事先知道后端节点状态是否健康,后端即使有不健康节点,负载均…...

路由交换实验

案例一&#xff1a;实施和配置RIPV2 1.给AR1配置接口 查看R1接口配置情况 2.配置三台路由的RIP协议&#xff0c;版本为version2 &#xff0c;关闭自动汇总&#xff0c;通告所有的直连接口 案例二&#xff1a;配置多区域的OSPF协议 1.配置R1的接口IP地址参数 2.配置r2,r3的接口参…...

主成分分析(PCA)是什么?简易理解版

文章目录 一、PCA的本质与核心价值二、数据中的"重要方向"&#xff1a;理解变异性三、主成分的数学基础四、荷载向量的深入理解五、PCA的计算过程详解5.1 数据预处理5.2 计算协方差矩阵5.3 特征分解5.4 主成分得分计算 六、PCA的实际应用解读七、PCA的工具与实现7.1 …...

Linux常用命令34——uname显示系统内核信息

在使用Linux或macOS日常开发中&#xff0c;熟悉一些基本的命令有助于提高工作效率&#xff0c;uname命令来自英文词组UNIX name的缩写&#xff0c;其功能是查看系统主机名、内核及硬件架构等信息。如果不加任何参数&#xff0c;默认仅显示系统内核名称&#xff08;相当于-s参数…...

Linux下使用openssh搭建sftp服务

创建 SFTP 用户组 为 SFTP 用户创建一个专用组&#xff1a; sudo groupadd sftpusers 创建 SFTP 用户 创建 SFTP 用户并将其添加到 sftpusers 组&#xff0c;同时指定用户的主目录和禁止 shell 访问&#xff1a; sudo useradd -g sftpusers -s /sbin/nologin username sud…...

C++ 复习(一)

命名空间 概念 &#xff1a; 命名空间的主要作用是创建一个新的作用域 里面可以放函数 变量 定义 为了防止命名冲突 实现 : 通过使用namespace 空间名 {} 在大括号中添加 内容 1. 这里命名空间允许嵌套 2. 在同一个工程中允许存在多个同名的命名空间 在最后编译…...

主备Smart Link + Monitor Link组网技术详细配置

1.实验拓扑 2.使用设备 eNSP模拟建议下行设备三台使用S3700模拟&#xff08;全部使用S5700可能会出现流量丢失等异常问题。&#xff09; 3.实验配置 [SW1]dis cu # sysname SW1 # vlan batch 100 110 # interface Ethernet0/0/1port link-type accessport default vlan 100 …...

【5G通信】redcap和bwp 随手记

在5G通信中&#xff0c;BWP&#xff08;Bandwidth Part&#xff09;是一种技术&#xff0c;允许终端设备在不同的带宽部分上进行通信&#xff0c;从而提高频谱效率和灵活性。BWP可以分为初始BWP&#xff08;Initial BWP&#xff09;、默认BWP&#xff08;Default BWP&#xff0…...

第三天 车联网云架构

一、车联网技术演进与行业变革 1.1 从传统Telematics到智能网联汽车 当我们驾驶着搭载智能网联系统的汽车时&#xff0c;车辆每秒会产生超过1GB的数据流量。这些数据包括&#xff1a; 高精度地图的实时更新ADAS传感器采集的环境信息车载娱乐系统交互数据车辆状态监控信息 传…...

手撕基于AMQP协议的简易消息队列-7(客户端模块的编写)

在MQClient中编写客户端模块代码 在MQClient中编写makefile文件来编译客户端模块 .PHONY:all all:PublichClient ConsumeClient PublichClient : PublichClient.cpp ../MQCommon/request.pb.cc ../MQCommon/message.pb.cc ../ThirdLib/lib/include/muduo/protobuf/codec.ccg …...

Spring Security(笔记)

第一步&#xff1a; 首先使用Intellij IDEA创建一个Spring Boot项目&#xff0c;JDK选择自己安装的1.8。点击Next后&#xff0c;编辑项目信息。然后跳转到选择依赖页面。 第二步&#xff1a; 添加Spring Security、Spring Web、Thymeleaf三个依赖。完成后等待项目构建完成。…...

通义灵码编码插件支持MCP

通义灵码MCP功能集成概述 通义灵码已深度集成魔搭社区&#xff08;ModelScope&#xff09;的MCP&#xff08;Model Context Protocol&#xff09;服务&#xff0c;为开发者提供了在IDE中直接调用AI能力的便捷通道。MCP作为标准化协议&#xff0c;通过定义Resources、Prompts和…...

问题 | 当前计算机视觉迫切解决的问题

当前计算机视觉领域虽然在技术上取得了显著进展&#xff0c;但仍面临一系列关键挑战。结合最新研究与应用现状&#xff0c;以下是最迫切需要解决的几大问题&#xff1a; 1. 数据质量与多样性不足 高质量标注数据的获取&#xff1a;训练高效模型依赖大量精准标注的数据&#x…...

C++ STL入门:vecto容器

C STL 系列入门&#xff1a;vector 动态数组 一、vector 容器核心特性 vector 是 C 标准库提供的动态数组容器&#xff0c;具有以下显著优势&#xff1a; 自动扩容机制&#xff1a;当插入元素超出当前容量时&#xff0c;自动申请新内存并迁移数据随机访问效率&#xff1a;支持…...

Java 线程全面概述

Java 线程全面概述 线程是程序执行的最小单元&#xff0c;是操作系统能够调度的最小单位。Java 提供了完善的线程支持&#xff0c;下面从基础概念到高级特性进行全面解析。 一、线程基础概念 1. 线程 vs 进程 特性进程线程资源占用独立内存空间共享进程内存切换成本高&#…...

高效文件夹迁移工具,轻松实现批量文件管理

软件介绍 DirMapper是一款专注于文件夹迁移的工具&#xff0c;可以快速完成文件的批量整理与位置调整。 功能特点 这款文件夹迁移工具提供两种操作模式&#xff1a;复制模式和移动模式&#xff0c;用户可以根据需求自行选择。如果需要保留原文件&#xff0c;可以选择复…...

sherpa:介绍

更多内容&#xff1a;XiaoJ的知识星球 目录 1. sherpa 介绍 1. sherpa 介绍 sherpa是 Next-gen Kaldi 项目的部署框架。 sherpa 支持在各种平台上部署与语音相关的预训练模型&#xff0c;并提供多种语言绑定。 目前&#xff0c;sherpa 拥有以下子项目&#xff1a; k2-fsa/sh…...

Android Studio Gradle 中 只显示 Tasks 中没有 build 选项解决办法

一、问题描述 想把项目中某一个模块的代码单独打包成 aar ,之前是点击 AndroidStudio 右侧的 Gradle 选项&#xff0c;然后再点击需要打包的模块找到 build 进行打包&#xff0c;但是却发现没有 build 选项。 二、解决办法 1、设置中勾选 Configure all Gradle tasks… 选项 …...

手撕基于AMQP协议的简易消息队列-6(服务端模块的编写)

在MQServer中编写服务端模块代码 在MQServer中编写makefile文件来编译服务端模块 .PHONY: server CFLAG -I../ThirdLib/lib/include LFLAG -L../ThirdLib/lib/lib -lgtest -lprotobuf -lsqlite3 -pthread -lmuduo_net -lmuduo_base -lz server:server.cpp ../MQCommon/messag…...

面试实践AND面经热点题目总结

1、对于Rocketmq消息积压、丢失如何解决&#xff1f; 消息积压原因以及解决方案 &#x1f3af; 产生原因&#xff1a; 消费者处理能力弱&#xff0c;消费速度远低于生产速度&#xff1b; 网络不稳定&#xff0c;消费者拉取消息失败&#xff1b; 消费端异常&#xff08;如处理…...

MySQL基础关键_012_事务

目 录 一、概述 二、ACID 四大特性 三、MySQL 事务 四、事务隔离级别 1.说明 2.现象 &#xff08;1&#xff09;脏读 &#xff08;2&#xff09;不可重复读 &#xff08;3&#xff09;幻读 3.查看隔离级别 4.设置隔离级别 5.隔离级别 &#xff08;1&#xff09;初始…...