嵌入式学习第十一天

news2024/11/17 19:47:41

1.数组和指针的关系:


    1.一维数组和指针的关系:
        int a[5] = {1, 2, 3, 4, 5};
        int *p = NULL;

        p = &a[0];
        p = a;

        数组的数组名a是指向数组第一个元素的一个指针常量
        a == &a[0]      
        a 的类型可以理解为 int *
        有两种情况除外:
            1.sizeof运算时
            2.&运算符

        访问下标为n的数组元素的方式:
        a[n] == *(a+n) == *(p+n) == p[n]

    2.一维数组传参:
        int a[5] = {0};

        int Fun(int parray[5]);
        int Fun(int parray[], int len);
        int Fun(int *parray, int len);

    3.一维字符型数组传参:
        char str[32] = {0};

        int Fun(char *pstr, int len);

    4.字符串传参:
        char str[32] = {"hello world"};

        int Fun(char *pstr);

        注意:
            字符串遍历:

            char str[32] = {"hello world"};
            char *pstr = NULL;

            pstr = str;
            while (*pstr != '\0')
            {
                pstr++;
            }

练习:封装一个函数MyStrlen实现strlen的功能;

  1 #include <stdio.h>                                                                                                                                                                                      
  2 
  3 int MyStrlen(char *pster)
  4 {
  5     int i = 0;
  6     int cnt = 0;
  7 
  8     while (pster[i] != '\0')
  9     {
 10         i++;
 11         cnt++;
 12     }
 13     return cnt;
 14 }
 15 
 16 int main(void)
 17 {
 18     char str[32] = "hello world";
 19     int len = 0;
 20 
 21     len = MyStrlen(str);
 22 
 23     printf("len = %d\n",len);
 24 
 25     return 0;
 26 }


   

练习:封装一个函数,给定一个字符串,统计该字符串中大写字母、小写字母、数字和空格的个数

     提示:   char str[256] = {0};

        gets(str);

        GetNum();

        int GetNum(char *pstr, int *pDaxie, int *pXiaoxie, int *pKong, int *pShuzi);
        

        while (*pstr >= 'a' && *pstr <= 'z')
        {
            xiaoxie++;
        }


    练习:封装一个函数MyStrcpy实现strcpy的功能

  1 #include <stdio.h>
  2 
  3 int MyStrcpy(char *pdst,char *pstr)
  4 {
  5     while (*pstr != '\0')
  6     {
  7         *pdst = *pstr;
  8         pdst++;
  9         pstr++;
 10     }
 11 
 12     *pdst = '\0';
 13 
 14     return 0;
 15 }
 16 
 17 int main(void)
 18 {
 19     char str[32] = {0};
 20     char dst[32] = {0};
 21 
 22     gets(str);
 23 
 24     MyStrcpy(dst,str);                                                                                                                                                                                  
 25 
 26     puts(dst);
 27 
 28     return 0;
 29 }

练习:封装一个函数MyStrcat实现strcat的功能

  1 #include <stdio.h>
  2 
  3 int MyStrcat(char *pstr,char *pdst)
  4 {
  5     while (*pstr != '\0')
  6     {
  7         pstr++;
  8     }
  9 
 10     while (*pdst != '\0' )
 11     {
 12         *pstr = *pdst;
 13         pdst++;
 14         pstr++;                                                                                                                                                                                         
 15     }
 16 
 17     *pdst = '\0';
 18 
 19     return 0;
 20 }
 21 
 22 int main(void)
 23 {
 24     char str[32] = {0};
 25     char dst[32] = {0};
 26 
 27     gets(str);
 28     gets(dst);
 29 
 30     MyStrcat(str,dst);
 31 
 32     puts(str);
 33 
 34     return 0;
 35 }


练习:封装一个函数MyStrcmp实现strcmp的功能

  1 #include <stdio.h>
  2 
  3 int MyStrcmp(char *pstr,char *pdst)
  4 {
  5     while (*pstr == *pdst && *pstr != '\0' )
  6     {
  7         *pstr++;
  8         *pdst++;
  9     }
 10 
 11     return *pstr - *pdst;                                                                                                                                                                               
 12 }
 13 
 14 int main(void)
 15 {
 16     char str[32] = {0};
 17     char dst[32] = {0};
 18     int ret = 0;
 19 
 20     gets(str);
 21     gets(dst);
 22 
 23     ret = MyStrcmp(str,dst);
 24 
 25     printf("ret = %d\n",ret);
 26 
 27     return 0;
 28 }

2.数组指针和指针数组:
    数组指针是指针,指针指向一个数组
    指针数组时数组,数组每个元素都是指针类型

    int *a[5] = {NULL};
    定义一个指针数组,数组占40个字节空间,每个元素为int *型,共5个元素

    int (*a)[5] = NULL;
    定义一个数组指针变量,占8个字节空间,指针指向了一个int类型5个元素的数组

    1.数组指针:
        int a[5];

        &a:获得数组的首地址,其类型为int (*)[5]
        
        注意:
            对一维数组数组名&,值不变,类型升级为数组指针类型
            对数组指针*,值不变,类型降级成为指向数组第一个元素的指针

作业:
    1.封装一个函数实现MyStrlen实现strlen的功能
    2.封装一个函数实现MyStrcpy实现strcpy的功能
    3.封装一个函数实现MyStrcat实现strcat的功能
    4.封装一个函数实现MyStrcmp实现strcmp的功能

    5.封装一个函数实现字符串的倒置(逆序)
      int InvertString(char *pstr);
    
    6.从终端输入一个a和n封装函数按照如下公式获得结果
        a:3
        n:5

        3+33+333+3333+33333 = 37035

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4                                                                                                                                                                                                         
  5 int InvertString(char *pstr,char *pdst)
  6 {
  7     char tmp = 0;
  8 
  9     while (pstr < pdst)
 10     {
 11         tmp = *pstr;
 12         *pstr = *pdst;
 13         *pdst = tmp;
 14         pstr++;
 15         pdst--;
 16     }
 17 
 18     return 0;
 19 }
 20 
 21 int main(void)
 22 {
 23     char str[32] = {0};
 24 
 25     gets(str);
 26 
 27     InvertString(str,str + strlen(str) -1);
 28 
 29     puts(str);
 30 
 31     return 0;
 32 }

  1 #include <stdio.h>
  2 
  3 int GetNum(int x,int y)
  4 {
  5     int i = 0;
  6     int sum = 0;
  7     int num = 0;
  8 
  9     for (i = 0;i < y;i++)
 10     {
 11 //      num = num * 10 + x;
 12 //      sum += num;                                                                                                                                                                                     
 13         sum += x;
 14         x = (x * 10) + (x % 10);
 15     }
 16     
 17     return sum;
 18  
 19 }
 20 
 21 int main(void)
 22 {   
 23     int a = 0;
 24     int n = 0;
 25     int ret = 0;
 26     
 27     scanf("%d%d",&a,&n);
 28     
 29     ret = GetNum(a,n);
 30     
 31     printf("ret = %d\n",ret);
 32     
 33     return 0;
 34 }


 

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

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

相关文章

《动手学深度学习(PyTorch版)》笔记4.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

SpringBoot自定义全局异常处理器

文章目录 一、介绍二、实现1. 定义全局异常处理器2. 自定义异常类 三、使用四、疑问 一、介绍 Springboot框架提供两个注解帮助我们十分方便实现全局异常处理器以及自定义异常。 ControllerAdvice 或 RestControllerAdvice&#xff08;推荐&#xff09;ExceptionHandler 二、…

软件设计师——计算机网络(四)

&#x1f4d1;前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…

架构整洁之道-设计原则

4 设计原则 通常来说&#xff0c;要想构建一个好的软件系统&#xff0c;应该从写整洁的代码开始做起。这就是SOLID设计原则所要解决的问题。 SOLID原则的主要作用就是告诉我们如何将数据和函数组织成为类&#xff0c;以及如何将这些类链接起来成为程序。请注意&#xff0c;这里…

chroot: failed to run command ‘/bin/bash’: No such file or directory

1. 问题描述及原因分析 在busybox的环境下&#xff0c;执行 cd rootfs chroot .报错如下&#xff1a; chroot: failed to run command ‘/bin/bash’: No such file or directory根据报错应该rootfs文件系统中缺少/bin/bash&#xff0c;进入查看确实默认是sh&#xff0c;换成…

vertica10.0.0单点安装_ubuntu18.04

ubuntu的软件包格式为deb&#xff0c;而rpm格式的包归属于红帽子Red Hat。 由于项目一直用的vertica-9.3.1-4.x86_64.RHEL6.rpm&#xff0c;未进行其他版本适配&#xff0c;而官网又下载不到vertica-9.3.1-4.x86_64.deb&#xff0c;尝试通过alian命令将rpm转成deb&#xff0c;但…

【GitHub项目推荐--30 天学会XXX】【转载】

30 天学会 React 这个项目是《30 天 React 挑战》&#xff0c;是在 30 天内学习 React 的分步指南。它需要你学习 React 之前具备 HTML、CSS 和 JavaScript 知识储备。 除了 30 天学会 React&#xff0c;开发者还发布过 30 天学会 JavaScript 等项目。 开源地址&#xff1a;…

解读BEVFormer,新一代CV工作的基石

文章出处 BEVFormer这篇文章很有划时代的意义&#xff0c;改变了许多视觉领域工作的pipeline[2203.17270] BEVFormer: Learning Birds-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers (arxiv.org)https://arxiv.org/abs/2203.17270 BEV …

数论Leetcode204. 计数质数、Leetcode858. 镜面反射、Leetcode952. 按公因数计算最大组件大小

Leetcode204. 计数质数 题目 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 代码 class Solution:def countPrimes(self, n: int) -> int:if n < 2:return 0prime_arr [1 for _ in range(n)]prime_arr[0], prime_arr[1] 0, 0ls list()for i in…

链表--102. 二叉树的层序遍历/medium 理解度C

102. 二叉树的层序遍历 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root […

Django开发_20_form表单前后端关联(2)

根据上一篇文章的代码,进一步了解掌握GET,POST的运行机制 一、实例代码 views.py: def show_reverse(request):if request.method "GET":return redirect(reverse("work4:fill"))if request.method "POST":hobby request.POST.get("h…

Android Studio离线开发环境搭建

Android Studio离线开发环境搭建 1.下载离线和解压包2.创建工程3.创建虚拟机tips 1.下载离线和解压包 下载地址 百度网盘&#xff1a;https://pan.baidu.com/s/1XBPESFOB79EMBqOhFTX7eQ?pwdx2ek 天翼网盘&#xff1a;https://cloud.189.cn/web/share?code6BJZf2uUFJ3a&#…

Apache SeaTunnel 数据集成插件开发最新经验总结!

在Apache SeaTunnel的最新插件开发中&#xff0c;connector-v2 maxcompute 连接器实现了基于CatalogTable SaveMode的新版本。 本文主要给大家分享了源端的关键改动包括弃用了过时的方法&#xff0c;改为通过CatalogTable实现数据传递。汇端则增加了对multi-table sink和save…

HTML+JavaScript-04

JavaScript中的循环 for语句 一个for循环会一直执行&#xff0c;直到循环条件为false for(let i0; i<array.length-1; i){//当遍历完数组后结束循环console.log(array[i] "<br/>");//循环语句 }do...while语句 do...while 语句一直重复直到指定的条件求…

深入理解Redis:如何设置缓存数据的过期时间及其背后的机制

目录 Redis 给缓存数据设置过期时间 Redis是如何判断数据是否过期的呢&#xff1f; 过期的数据的删除策略 Redis 内存淘汰机制 Redis 给缓存数据设置过期时间 一般情况下&#xff0c;我们设置保存的缓存数据的时候都会设置一个过期时间。为什么呢&#xff1f; 因为内存是有…

shell编程-7

shell学习第7天 sed的学习1.sed是什么2.sed有两个空间pattern hold3.sed的语法4. sed里单引号和双引号的区别:5.sed的查找方式6.sed的命令sed的标签用法sed的a命令:追加sed的i命令:根据行号插入sed的c命令:整行替换sed的r命令sed的s命令:替换sed的d命令:删除sed中的&符号 7…

Ubuntu20.04添加桌面启动、侧边栏启动和终端启动

桌面启动 新建XX.desktop文件 在桌面新建一个XX.desktop文件&#xff0c;以QtCreator为例。 &#xff08;注意这里不能使用sudo&#xff0c;因为这样会把文件的权限归为root&#xff0c;导致后续设置可执行程序不方便&#xff09; gedit qtcreator.desktop在XX.desktop文件中…

算子:详细篇

目录 一、执行环境 1.1 创建执行环境 1.2 执行模式 二、源算子 2.1 从集合中读取数据 2.2 从文件读取数据 2.3 从socket读取数据 2.4 从kafka读取数据 三、转换算子 3.1 基本转换算子 &#xff08;1&#xff09;映射(map) &#xff08;2&#xff09;过滤(filter) &#xff08…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)二

第六部分、数据结构树&#xff0c;树存储结构详解 数据结构的树存储结构&#xff0c;常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中&#xff0c;最常用的还是二叉树&#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

ASP.NET 7 Core Web 读取appsetting.json

把一些配置信息保存在json文件可以避免更改时要重新发布程序的烦恼。 我这里使用的是写一个类文件&#xff0c;然后通过program.cs启动的方式&#xff08;.net 6 开始没有startup了&#xff09;。 项目类型&#xff1a;ASP.NET Core Web MVC / .NET 7.0 / VS2022 第一步…