当前位置: 首页 > news >正文

Linux环境下的C语言编程(十七)

 前言

本文作为一个学习C语言学习笔记,记录 【史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】-哔哩x课程笔记和自己的困惑之处。请各位大佬指出我的不足之处,更好的促进我的成长。

函数三种参数传递方式

1. 值传递

特点:传递参数的副本,函数内修改不影响原变量

#include <stdio.h>void swapByValue(int a, int b) {int temp = a;a = b;b = temp;printf("函数内 - a = %d, b = %d\n", a, b);
}// 计算平方的函数
int square(int num) {return num * num;
}int main() {int x = 5, y = 10;printf("交换前 - x = %d, y = %d\n", x, y);swapByValue(x, y);printf("交换后 - x = %d, y = %d\n", x, y);  // x,y的值不变return 0;
}

运行结果:

交换前 - x = 5, y = 10
函数内 - a = 10, b = 5
交换后 - x = 5, y = 10

2. 地址传递

特点:传递变量的地址,函数内修改会影响原变量

#include <stdio.h>//交换两个变量的值函数
void swapByAddress(int *a, int *b) {int temp = *a;*a = *b;*b = temp;printf("函数内 - *a = %d, *b = %d\n", *a, *b);
}// 修改数组元素的函数
void modifyArray(int arr[], int size) {for(int i = 0; i < size; i++) {arr[i] = arr[i] * 2;  // 每个元素乘以2}
}// 打印数组的函数
void printArray(int arr[], int size) {for(int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int x = 5, y = 10;printf("交换前 - x = %d, y = %d\n", x, y);swapByAddress(&x, &y);  // 传递地址printf("交换后 - x = %d, y = %d\n", x, y);  // x,y的值被交换// 数组示例(数组名本身就是地址)int numbers[] = {1, 2, 3, 4, 5};int length = 5;printf("修改前数组: ");printArray(numbers, length);modifyArray(numbers, length);  // 注:数组名就是地址!printf("修改后数组: ");printArray(numbers, length);return 0;
}

运行结果:

交换前 - x = 5, y = 10
函数内 - *a = 10, *b = 5
交换后 - x = 10, y = 5
修改前数组: 1 2 3 4 5
修改后数组: 2 4 6 8 10

3. 全局变量(一般不使用)

特点:在所有函数外部定义的变量,任何函数可以访问

#include <stdio.h>// 全局变量
int globalCounter = 0;// 使用全局变量的函数
void incrementCounter() {globalCounter++;printf("计数器增加: %d\n", globalCounter);
}void resetCounter() {globalCounter = 0;printf("计数器重置: %d\n", globalCounter);
}// 另一个全局变量示例
double PI = 3.14159;double calculateCircleArea(double radius) {return PI * radius * radius;
}double calculateCircleCircumference(double radius) {return 2 * PI * radius;
}int main() {// 使用计数器函数incrementCounter();incrementCounter();incrementCounter();resetCounter();incrementCounter();// 使用PI计算double r = 5.0;printf("半径为%.1f的圆:\n", r);printf("面积: %.2f\n", calculateCircleArea(r));printf("周长: %.2f\n", calculateCircleCircumference(r));return 0;
}
运行结果:
计数器增加: 1
计数器增加: 2
计数器增加: 3
计数器重置: 0
计数器增加: 1
半径为5.0的圆:
面积: 78.54
周长: 31.42

三种参数传递方式对比

传递方式特点适用场景注意事项
值传递传递副本,原值不变不需要修改原数据的情况大型结构体可能影响性能
地址传递传递地址,可修改原值需要修改原数据或传递大型数据需要掌握指针,注意空指针
全局变量所有函数可访问程序全局共享的数据谨慎使用

选择建议:

  • 简单数据、不需要修改:使用值传递

  • 需要修改原数据或传递数组:使用地址传递

  • 真正全局共享的数据:考虑使用全局变量

http://www.dtcms.com/a/582496.html

相关文章:

  • JAVA算法练习题day64
  • 小华HC32F460串口性能问题与处理思路
  • Java_Hashtable使用及扩容
  • Django序列化器
  • 跳表与B+树
  • 上海外贸网站优化自己做提卡网站
  • 学习日报 20251107|Nacos 注册同一服务多实例架构图
  • 营销型网站建设运营苏州园区
  • 广州站在哪个区酒店 网站构建
  • 网站开发的合同网络工程师中级职称报考条件
  • 相亲网站源码php模版wordpress听歌插件
  • 微网站 服务器在线设计logo图案免费
  • stm32 gpio 先写电平再初始化,是否可行?
  • 数字签名、 数字信封、数字证书
  • 马云的网站是谁建设的wordpress多广告位
  • Leetcode 47
  • 营销型网站分类自己服务器可以做网站
  • EtherCAT命令整理
  • Windows 常用命令行(CMD/PowerShell 通用,标注差异)
  • 小迪安全v2023学习笔记(一百四十五讲)—— Webshell篇魔改冰蝎打乱特征指纹新增加密协议过后门查杀过流量识别
  • 网站源码做exe执行程序域名被墙查询检测
  • HarmonyOS:ArkWeb在新窗口中打开页面
  • 青岛谁做网站多少钱做网站大概需要多少费用
  • jmeter内存踩坑记录
  • 浙江建设职业技术学院网站彬县网
  • PowerShell 和 CMD
  • EFS `<br>` 标签渲染修复:从文本到换行的完整解决方案
  • 怎样在建设厅网站查询安全员证彩票网站开发与建设
  • 创建一个网站要钱吗梅林网站建设公司
  • 成都小程序定制开发企业网站怎样做seo优化 应该如何做