嵌入式学习第十一天

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.mzph.cn/news/651410.shtml

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

相关文章

五步安装和配置CLion的ESP-IDF开发框架

记录CLion安装和配置ESP-IDF开发框架 真无语了&#xff0c;弄了半天多&#xff0c;近一天&#xff0c;这里弄那里弄。记录一下&#xff0c;万一后面还要踩坑呢&#xff01; 弄一早上components的编写和使用&#xff08;想用别人的components&#xff09;&#xff0c;下午弄开…

Java基础-实现猜数字小游戏

1. 实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字&#xff1b; 2. 要求用户从控制台输入数字&#xff0c;若输入的数字比随机数小&#xff0c;则提示太小了&#xff1b;若输入的数字比随机数大&#xff0c;则提示太大了&#xff0c;若输入的数字与随机数相同…

JavaScript学习-原型和原型链

原型和原型链 示例代码 //创建一个Person类 class Person {constructor(name) {this.name name;}drink() {console.log(喝水);} } //创建一个Teacher类&#xff0c;继承Person class Teacher extends Person {constructor(name, subject) {super(name);this.subject subjec…

软件测试活动中,如何评估测试范围?

前言 大家好&#xff0c;我是chowley&#xff0c;今天来讲一讲——如何评估软件测试范围 在软件开发的不同阶段&#xff0c;评估测试范围是确保测试活动有效性和效率的关键步骤。测试范围的明确定义有助于确定测试目标、提高测试覆盖率&#xff0c;并确保在有限的时间内实现最…

动手学深度学习8 Softmax回归+损失函数+图片分类

Softmax回归损失函数图片分类 1. Softmax回归--分类问题2. 三个常用损失函数1. 均方损失 L2 Loss2. 绝对值损失函数 L1 Loss3. 两个结合 HUber’s Robust Loss 3. 图片分类数据集4. Softmax回归从零开始实现5. Softmax回归简洁实现6. QA 1. Softmax回归–分类问题 真实y只有一个…

vue项目中路由懒加载的三种方式

1 . vue异步组件技术 异步加载 vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 . 但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { path: /home, name: home, component: resolve > require([/components/home],resolve) }, { path…

基于java+jsp+ssh的毕业生就业信息管理系统

&#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩项目推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮…

ShardingSphere之ShardingJDBC客户端分库分表下

目录 ShardingJDBC实战 STANDARD标准分片策略 COMPLEX_INLINE复杂分片策略 CLASS_BASED自定义分片策略 HINT_INLINE强制分片策略 ShardingJDBC实战 上篇已经将需要用到的类、数据库表都准备好了&#xff0c;本篇主要介绍分片配置文件。 STANDARD标准分片策略 如果按照上篇文…

golang版本使用令牌桶算法来实现限流的策略

代码 package mainimport ("fmt""sync""time" )// 令牌桶结构体 type TokenBucket struct {tokens chan struct{}rate time.Duration// 桶容量limit int }// 创建令牌桶 func NewTokenBucket(rate time.Duration, limit int) *TokenBucket {r…

纳斯达克户外大屏背景配什么颜色效果最好-大舍传媒

纳斯达克户外大屏背景配什么颜色效果最好 引言 纳斯达克大屏是世界闻名的户外广告媒体之一&#xff0c;通过高清大屏呈现的广告内容吸引了众多目光。大舍传媒作为纳斯达克大屏的提供商和运营商之一&#xff0c;致力于创造最佳的视觉效果来吸引观众的注意力。在纳斯达克大屏投…

C语言“++”和“--”运算符需要注意些什么?

一、问题 “”和“--”运算符经常被应⽤&#xff0c;使⽤这两种运算符需要注意些什么&#xff1f; 二、解答 在使用C语言中的自增&#xff08;&#xff09;和自减&#xff08;--&#xff09;运算符时&#xff0c;需要注意以下几点&#xff1a; 1、运算规则 运算符有两种形式&…

cs2系统提升思路

思路/战术 > 道具 > 练枪 思路/战术 通用的思路 > 针对性学习每一张图的思路 注意&#xff0c;休闲中人数较多&#xff0c;战术的体现不多&#xff0c;不要休闲打习惯了适应不了竞技 地图理解 / 分析 根据地形分析攻防 &#xff08;比如dust2&#xff0c;所有道路…

HCIA学习作业四

要求&#xff1a; 1、AR3还回为3.3.3.0/24 2、其他基于192.168.1.0/24进行合理划分 3、AR1和AR2均存在两个环回 4、整个网络运行RIP v2 但是不能直接宣告AR3的环回 5、全网可达&#xff0c;保障更新安全&#xff0c;尽量减少路由条目&#xff0c;避免环路 拓扑图&#xf…

EXP脚本编写

EXP脚本的编写与POC脚本编写一样&#xff0c;只需要修改_attack部分&#xff0c;替换成漏洞 利用的脚本即可。要利用Flask漏洞&#xff0c;需要用到Python的特性。关于如何在Jinja2模 板中执行Python代码&#xff0c;官方给出的方法是在模板环境中注册函数就可以进行调 用。 J…

java servlet运输公司管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web运输公司管理系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

Multi-label classification复现

摘要 存在 theoretical results show that SA and HL are conflicting measures 1 介绍 an algorithm usually performs well on some measures while poorly on others.There are a few works studying the behavior of various measures.Although they provide valuable i…

【网站项目】基于SSM的246品牌手机销售信息系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

多路复用简述

1、概念 多路复用是一种计算机编程和通信领域的技术,用于有效地处理多个输入/输出任务或连接,提高系统的性能和响应性。它的主要目的是在一个单一的线程或进程中同时处理多个任务,而不是为每个任务创建一个独立的线程或进程。 在网络编程中,多路复用通常通过以下几种机制来…

cmake工具的安装

1、简介 CMake 是一个开源的、跨平台的自动化建构系统。它用配置文件控制编译过程的方式和Unix的make相似&#xff0c;只是CMake并不依赖特定的编译器。CMake并不直接建构出最终的软件&#xff0c;而是产生标准的建构文件&#xff08;如 Unix 的 Makefile 或 Windows Visual C …

自述20年的痛:一个读书人的知识与自恋,自古文人多清高

自述20年的痛&#xff1a;一个读书人的知识与自恋&#xff0c;自古文人多清高 20年读书的痛&#xff1a;你就是书读太多了&#xff0c;想法太多了&#xff0c;没必要20年读错了书&#xff1a;这些知识没有帮助我培养竞争力&#xff0c;而只是增强了我的自恋 20年读书的痛&#…