嵌入式学习 Day 29

函数:
    1.函数的定义
    2.函数的调用
    3.函数的声明

1.函数传参:


    1.赋值传递(复制传递)

        函数体内部想要使用函数体外部变量值的时候使用复制传递

    2.全局变量传递

    3.地址传递

        函数体内部想要修改函数体外部变量值的时候使用地址传递
        函数体内想修改函数体外指针变量值的时候传指针变量的地址即二级指针
    

注意:这是值传递不是地址传递 

区分赋值传递和地址传递关键在于看实参中所传是变量的值还是变量的地址

这才是地址传递(二级指针传递)

    4.整形数组传递

        int a[5] = {1, 2, 3, 4, 5};

        int Fun(int parray[5]);                  //很少用,除非限定了数组的长度(pipe中用到)
        int Fun(int parray[], int len);        //后两个长度传多少就操作几个元素
        int Fun(int *parray, int len);         //这是本质(本质传的都是指针),用这种最规范
    

 注意:这是值传递

这里a作为数组首元素的地址,是一个常量,是值传递不是地址传递,不会因被调的操作而改变。

指针做值传递,不会改变指针的值,但可以在被调中通过指针加偏移量来改变指针所指向空间的值

    5.字符型数组和字符串的传递

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

        int Fun(char *pstr);   //字符型数组传参时只需要传数组首元素的地址,不要传数组长度(昌都可以根据  '\0'  来算出)

    6.整形二维数组传递

        int a[2][3] = {1, 2, 3, 4, 5, 6};

        int Fun(int (*parray)[3], int len); //传二维数组的数组名(二维数组的数组名是指向数组第一行元素的一个数组指针)行数

 

对数组指针取*,值不变,类型降级为指向第一个元素的指针(原来是指向第一行的指针)

    7.字符型二维数组传递

        char str[5][32] = {"hello", "world", "how", "are", "you"}; 

        int Fun(char (*pstr)[32], int len);

 

 

 

多个字符串存储用二维数组,操作用指针数组 

    8.指针数组传递

        char *pstr[5] = {NULL};

        int Fun(char **ppstr, int len);

    9.结构体变量传递(整个的拷贝)

        struct student s;

        int Fun(struct student tmp);

    10.结构体指针传递(只拷贝要用的,占用内存更小)

        struct student s;

        int Fun(struct student *ps);

    11.结构体数组传递 

        struct student stu[3];

        int Fun(struct student *pstu, int len);

注意:

1.传递数组,外面怎么操作数组,里面就怎么操作数组

2.一维数组就传数组名和长度(一维字符型数组只传数组名)

   二维数组就传数组名和行数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java多态性的作用及解析

多态性是 Java 面向对象编程的一个重要特性,它的主要作用包括以下几个方面: 提高代码的可扩展性:多态性使得我们可以在不修改现有代码的情况下,通过继承和重写方法来添加新的行为。这意味着我们可以在不影响现有功能的前提下,对代码进行扩展和修改。 增强代码的可读性:使…

STM32F103--基于正点原子的 FreeRTOS 移植(完整教程)附测试代码

前言 在看正点原子的FreeRTOS开发手册移植的时候,发现开发手册的描述并不全面,有几处遗漏。下面我展示出完整的教程,希望大家在学习的时候能够轻松点。 一、准备工作 1、正点原子的FreeRTOS官方资料 大家可自行到官方下载,或者在…

基于springboot+vue的健身房管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

FPGA之加法逻辑运算

由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC 那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM 工艺的查找表结构。LUT本质上就是一个RAM。它把…

leetcode 热题 100_找到字符串中所有字母异位词

题解一&#xff1a; 滑动窗口&#xff1a;类似于字符串匹配&#xff0c;但匹配异位词需要包含相同的字母及个数&#xff0c;可以分别用两个数组存储字符串s滑动窗口和字符串p的字母及个数&#xff0c;再用Array.equals()进行比对。对于s.length()<p.length()的情况需要特判。…

【Linux】线程概念|线程理解|线程控制

文章目录 线程概念Linux中线程是否存在的讨论线程创建和线程控制线程的终止和等待&#xff08;三种终止方式 pthread_join()的void**retval&#xff09; 线程概念 线程就是进程内部的一个执行流&#xff0c;线程在进程内运行&#xff0c;线程在进程的地址空间内运行&#xff0…

Redis集群(主从)

1.主从集群 集群结构: 一.单机安装redis 1.上传压缩包并解压&#xff0c;编译 tar -xzf redis-6.2.4.tar.gz cd redis-6.2.4 make && make install 2.修改redis.config的配置并启动redis # 绑定地址&#xff0c;默认是127.0.0.1&#xff0c;会导致只能在本地访问。…

SpringBoot源码解读与原理分析(四十)基于jar/war包的运行机制

文章目录 前言第14章 运行SpringBoot应用14.1 部署打包的两种方式14.1.1 以可独立运行jar包的方式14.1.2 以war包的方式 14.2 基于jar包的独立运行机制14.2.1 可独立运行jar包的相关知识14.2.2 SpringBoot的可独立运行jar包结构14.2.3 JarLauncher的设计及工作原理14.2.3.1 Jar…

2核4G云服务器租用价格_2核4G云主机优惠价格_2024年报价

租用2核4G服务器费用价格&#xff0c;2核4G云服务器多少钱一年&#xff1f;1个月费用多少&#xff1f;阿里云2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年&#xff1b;腾讯云轻量2核4G服务器5M带宽165元一年、252元15个月、540元三…

毕业生信息招聘平台|基于springboot+ Mysql+Java的毕业生信息招聘平台设计与实现(源码+数据库+文档+PPT)

目录 论文参考 摘 要 数据库设计 系统详细设计 文末获取源码联系 论文参考 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台&#xff0c;主要的模块包括查看管理员&a…

力扣经典题目解析--最小覆盖子串

原题地址: . - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找…

Finetuning Large Language Models: Sharon Zhou

Finetuning Large Language Models 课程地址&#xff1a;https://www.deeplearning.ai/short-courses/finetuning-large-language-models/ 本文是学习笔记。 Goal&#xff1a; Learn the fundamentals of finetuning a large language model (LLM). Understand how finetu…

Vue3:用vite创建Vue3项目

一、简介 vite是新一代前端构建工具&#xff0c;官网地址&#xff1a;https://vitejs.cn vite的优势如下&#xff1a; 轻量快速的热重载&#xff08;HMR&#xff09;&#xff0c;能实现极速的服务启动。对 TypeScript、JSX、CSS 等支持开箱即用。真正的按需编译&#xff0c;不…

【计算机那些事】

目录 【云计算】 【原神用的是UDP还是TCP】 【几个特殊地址】 【socket是什么】 【内网穿透是什么】 【为什么有HTTP协议&#xff0c;还要有websocket协议】 【科普路由器&#xff0c;集线器&#xff0c;交换机&#xff0c;网桥&#xff0c;光猫】 【USB接口那些事】 …

MacOS包管理工具homebrew使用教程

MacOS包管理工具homebrew使用教程 1.概述与安装2.基本使用3.其他常用命令 1.概述与安装 homebrew是Mac OS X上的强大的包管理工具&#xff0c;可以高效管理各种软件包 安装&#xff1a; 1、安装xcode&#xff1a; xcode-select --install2、一行命令下载&#xff1a; /bin…

个人项目介绍3:火车站篇

项目需求&#xff1a; 一比一精确显示火车站主建筑和站台模型。实时响应车辆信息&#xff08;上水&#xff0c;吸污&#xff0c;换乘&#xff09;并同步显示&#xff0c;实时响应车辆进出站信息&#xff0c;并以动画形式模拟。实时响应报警信息&#xff0c;并能在三位中显示&a…

快速搭建Vue前端框架

快速搭建Vue前端框架 安装Vue Vue官方安装过程:https://cli.vuejs.org/zh/guide/installation.html 二.创建Vue工程 2.2 安装淘宝镜像 安装淘宝镜像&#xff08;会让你安装Vue的速度加快&#xff09;&#xff1a; npm config set registry https://registry.npm.taobao.or…

【内推】金山办公 2024届 春季校园招聘

有需要内推的小伙伴吗&#xff1f; 金山办公 各岗位均有 面向应届生春招 QQ群&#xff1a;723529936 内推码&#xff1a;NTASYQI

十秒学会Ubuntu命令行:从入门到进阶

一、引言 在使用Ubuntu操作系统时&#xff0c;命令行界面&#xff08;CLI&#xff09;是不可或缺的一部分。对于初学者来说&#xff0c;掌握基本的命令行操作可以帮助他们更高效地管理系统和软件。本文将介绍一些常见的Ubuntu命令以及如何解决与命令行相关的问题。 二、常用Ubu…

【C语言】内存操作篇---动态内存管理----malloc,realloc,calloc和free的用法【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】内存操作篇---动态内存管理----malloc&#xff0c;realloc&#xff0c;calloc和free的用法【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 在学完结构体后&#xff08;…
最新文章