嵌入式学习day4:函数

张开发
2026/6/26 12:28:53 15 分钟阅读
嵌入式学习day4:函数
一.函数的定义1.形参int add(int a, int b ); /*函数的定义*/ int add(int a, int b )//声明一个名为add的函数返回值是int类型参数是两个int类型的变量 { return ab; } // ab是函数的形参是函数内的局部变量函数结束被销毁2.实参int main() { int x10,y20; int cadd(x,y); //这里的xy是实参 printf(%d,x); return 0; }注意形参的变化不会影响到实参的变化除非用指针传递3.使用指针传递值int add(int *a, int b )//声明一个名为add的函数返回值是int类型参数是两个int类型的变量 { *a5;//a是一个指针指向一个int类型的变量 b20; return *a; }主函数中形参记得加上传递x的地址当在函数中将a的值变为5时主函数中x的值也变为5int main() { int x10,y20; int cadd(x,y); //这里的xy是实参 printf(%d,x); //输出5 return 0; }二.递归函数1.结构return_type function_name(parameter_list) { if(终止条件) { //递归的终止条件 return 返回值; } else { //递归步骤继续调用自身 return function_name(参数); } }通过反复调用自身来达到效果如实现一个数的阶乘1*2*3*4*5*...n代码如下/*阶乘函数*/ int factorial(int n); int main() { int num 5; printf(%d的阶乘是:%d\n, num, factorial(num)); return 0; } int factorial(int n) { if (n0 || n1) { //基线条件n为0或1时返回1 return 1; } else { return n*factorial(n-1); //递归步骤继续调用自身 } }还有像递归函数最经典的斐波那契数列——从第三个数开始每一个数等于前两个数的和0 1 1 2 3 5 8 13 21....实现代码如下int Fibnacci(int n); int Fibnacci(int n) { if (n0) { return 0; } else if(n1) { return 1; } else { return Fibnacci(n-1)Fibnacci(n-2); } //3:f2f1:f2:f1f0:f11,f00:f21:f32 } int main() { int num 8; printf(%d的斐波那契数是:%d\n, num, Fibnacci(num)); return 0; }三.goto语句1.定义go-to语句只能在同一函数内跳转不能跨函数也不能跨文件但是由于太灵活所以不太建议使用通常可以用来跳出多层循环或使用goto处理错误。2结构goto label; //跳转到标签label处 ... label: //定义标签位置 ... //代码块3.应用示例1使用 goto 跳出多层循环int main() { int i, j, k; printf(\n示例 2跳出多层循环\n); for (i 0; i 3; i) { for (j 0; j 3; j) { for (k 0; k 3; k) { printf(i%d, j%d, k%d\n, i, j, k); if (k 1) { goto exit_loops; // 当 k1 时跳转到循环外 } } } } exit_loops: printf(已跳出所有循环\n); return 0; }示例2使用 goto 处理错误void errorHandlingExample() { int a, b; printf(示例 1错误处理\n); printf(请输入两个整数); if (scanf(%d %d, a, b) ! 2) { goto input_error; // 输入错误时跳转到错误处理标签 } if (b 0) { goto divide_error; // 除数为0时跳转到错误处理标签 } printf(%d / %d %d\n, a, b, a / b); return; // 正常结束 input_error: printf(错误输入格式不正确\n); return; divide_error: printf(错误除数不能为0\n); return; }这一章错题如下#include stdio.h #include string.h #include stdlib.h void mergeArrays(int arr1[], int len1, int arr2[], int len2, int result[]) { int i 0, j 0, k 0; // 合并两个数组直到其中一个数组遍历完 while (i len1 j len2) { if (arr1[i] arr2[j]) { result[k] arr1[i]; } else { result[k] arr2[j]; } } // 如果 arr1 还有剩余元素添加到结果数组 while (i len1) { result[k] arr1[i]; } // 如果 arr2 还有剩余元素添加到结果数组 while (j len2) { result[k] arr2[j]; } } // 打印数组的函数 void printArray(int arr[], int len) { for (int i 0; i len; i) { printf(%d , arr[i]); } printf(\n); } int main() { // 测试数据 int arr1[] {1, 3, 5, 7}; int arr2[] {2, 4, 6, 8}; // 数组长度 int len1 sizeof(arr1) / sizeof(arr1[0]); int len2 sizeof(arr2) / sizeof(arr2[0]); // 用来存储合并后的结果数组 int result[len1 len2]; // 合并两个数组并重新排序 mergeArrays(arr1, len1, arr2, len2, result); for(int i0; ilen1len2; i) { for (int ji1; jlen1len2; j) { if (result[i]result[j]) { int t result[i]; result[i] result[j]; result[j] t; } } } // 打印合并后的数组 printf(Merged Array: ); printArray(result, len1 len2); return 0; }

更多文章