news 2026/5/9 6:50:29

嵌入式Day--10C语言函数的调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式Day--10C语言函数的调用

1.函数调用

1.使用形式

函数调用前必须先定义

实参个数与形参个数需要匹配

实参与形参类型不一致时,会将实参类型转换为形参类型

函数的调用过程 #include <stdio.h> void fun3() { printf("this is fun3...\n"); return ; } void fun2() { fun3(); printf("this is fun2...\n"); return ; } void fun1() { fun2(); printf("this is fun1...\n"); return ; } int main() { fun1(); printf("this is main...\n"); return 0; }

原理如下:

2.函数参数的传递

2.1值传递

实参把参数数据的内容通过赋值运算符给形参的形式。形参是实参的一个副本(复制品)。数据内容是相同的,但实参的内存空间和形参的内存空间是独立的。 没有办法通过修改形参来达到修改实参的目的。值传递只能读取实参的值,不能进行修改。

#include <stdio.h> void fun(int arg) { arg++; printf("fun arg:%d\n",arg); } void swap(int a,int b) { int t = 0 ; t = a; a = b; b =t; printf("swap a:%d b:%d\n",a,b); } int main() { int i =10; fun(i); printf("i:%d\n",i); int a = 20; int b =1; swap(a,b); printf("main a:%d,b:%d\n",a,b); return 0; }

原理如下:

2.2地址传递

实参传递变量的内存地址值。 既可以读实参的数据的值,也可以修改。

一维整形数组做参数本质是地址传递。

void fill_array(int a[],int size)// int [] a; // 如果是整形数组的化,还需要数组的大小 { // 如果实参是数组类型,在被调内部,会降级为指针( 8 byte ,是数组在内存中的一个编号) // int size = sizeof(a)/sizeof(a[0]); int i = 0 ; for(i=0;i<size;i++) { // 这个不是值传递, 所以可以修改数组。 a[i] = rand()%30; } // printf("sizeof is a %lu\n",sizeof(a)); // printf("sizeof is a[0] %lu\n",sizeof(a[0])); } int main() { srand(time(NULL)); int array[10]={0}; int size = sizeof(array)/sizeof(array[0]); fill_array(array,size);// int [] return 0; }

一维字符数组的传参本质也是地址传递

// 对于字符数组(字符串)而言, 约定以\0 结尾。 // 所用可以通过判断\0 的位置,可以得出字符串的长度。 // 所以不需要传入 size int mystrlen(char a[]) // 依然是地址传递,可以对数组对写操作 { // sizeof(a) == 8byte int len = 0 ; while(1) { if('\0'!=a[len]) { len++; } else { break; } } return len; } int main() { char str[100]={0}; // char [] printf("input string1:"); gets(str); // hello\0 int len =mystrlen(str) return 0; }

3.函数的递归

3.1定义

在函数内部自己调用自己的函数调用被称为函数的递归。函数的递归属于循环的一种表现形式。 区别是函数的递归会使用栈空间。

此处需注意的是:需要设置合理的退出条件且递归的层次不要太深,太深会消耗大量的内存,可能导致程序崩溃。

示例:5的阶乘

int fun(int n) { if(1 == n || 0==n ) { return 1; } else { return fun(n-1) * n; } } int main() { int ret = fun(5); printf(" 5的阶乘 %d\n",ret); return 0; }

原理如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 6:40:55

基于Vue 3与Node.js的文档图片批量提取工具Extractify开发实践

1. 项目概述与核心价值最近在整理一个历史项目文档库&#xff0c;里面堆满了各种Word、PPT、PDF和Markdown文件&#xff0c;其中嵌入了大量有价值的图表和截图。手动一张张截图、另存为&#xff0c;不仅效率低下&#xff0c;还容易遗漏。为了解决这个痛点&#xff0c;我花了一周…

作者头像 李华
网站建设 2026/5/9 6:39:38

VectorDBBench:开源向量数据库基准测试框架实战指南

1. 项目概述与核心价值如果你正在为你的AI应用挑选向量数据库&#xff0c;或者正在评估现有向量检索系统的性能瓶颈&#xff0c;那么你大概率已经陷入了一个信息过载的困境。市面上有Milvus、Pinecone、Weaviate、Qdrant、Elasticsearch、PGVector等数十种选择&#xff0c;每个…

作者头像 李华
网站建设 2026/5/9 6:27:24

Phi-3.5-mini-instruct指令遵循能力:复杂嵌套指令准确执行案例

Phi-3.5-mini-instruct指令遵循能力&#xff1a;复杂嵌套指令准确执行案例 1. 模型概述 Phi-3.5-mini-instruct是微软推出的轻量级指令微调大语言模型&#xff0c;采用Transformer解码器架构&#xff0c;支持128K超长上下文窗口。该模型针对多语言对话、代码生成和逻辑推理任务…

作者头像 李华
网站建设 2026/5/9 6:25:29

Qwen2.5-14B-Instruct性能实测:像素剧本圣殿双GPU显存优化部署教程

Qwen2.5-14B-Instruct性能实测&#xff1a;像素剧本圣殿双GPU显存优化部署教程 1. 项目概览 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这个独特的创作环境将强大的AI推理能力与8-Bit复古美学完美…

作者头像 李华
网站建设 2026/5/9 6:23:31

从CRNN到Vision Transformer:聊聊OCR文本识别这十年的技术变迁与选型心得

从CRNN到Vision Transformer&#xff1a;OCR文本识别的十年技术演进与实战选型指南 过去十年间&#xff0c;OCR文本识别技术经历了从传统机器学习到深度学习的跨越式发展。作为计算机视觉领域的重要分支&#xff0c;文本识别技术已经从最初的简单字符分类&#xff0c;逐步演变为…

作者头像 李华
网站建设 2026/5/9 6:21:29

嵌入式系统内存管理:静态分配、栈与堆的实践指南

1. 嵌入式系统内存管理概述在嵌入式系统开发中&#xff0c;内存管理是决定系统稳定性和性能的关键因素。与通用计算机系统不同&#xff0c;嵌入式设备通常具有严格的内存限制&#xff08;可能只有几KB到几MB&#xff09;&#xff0c;且需要长时间不间断运行。这就意味着内存泄漏…

作者头像 李华