C语言那些事之如何自定义函数变量

本文介绍了如何在C语言中定义函数变量类型,通过实例展示了串口使用情况,强调了这种做法在事件回调和软件封装隐秘性增强上的应用,并解析了其实现原理。

写在前面
可用于事件回调,使软件封装隐秘性更强

一、定义函数变量类型

typedef void (*MyUart_callBack)(void *buf, size_t count);
说明:

  • MyUart_callBack为变量类型名称,类似int或者char变量类型
  • void *buf, size_t count为函数传参

二、实例

以串口的使用举例
底层封装

static MyUart_callBack MyUart_recvCB;
void Uart_ReadCallback(UART_Handle handle, void *buf, size_t count)
{
   
   
    MyU
### C语言中通过自定义函数更新主函数变量的方法 在C语言中,如果希望使用自定义函数来修改主函数中定义的变量值,则可以通过传递指针的方式实现这一目标。这是因为当我们将变量的地址作为参数传递给函数时,函数内部可以直接操作原始内存位置的数据。 以下是具体说明: #### 1. **传递指针的概念** 为了使函数能够访问并更改主程序中的变量值,可以将变量的地址(即指针)传递给函数。这种方式允许函数直接操作主程序中的数据,而不是仅限于局部副本的操作[^2]。 ```c void updateValue(int *ptr) { *ptr = 42; // 修改指针指向的内容 } ``` 在此代码片段中,`updateValue` 函数接收一个 `int` 类型的指针,并将其指向的值设置为 42。这种机制使得主函数中的变量可以在外部函数中被更新。 --- #### 2. **完整的示例** 下面展示了一个完整的例子,演示如何通过自定义函数更新主函数中的变量值。 ```c #include <stdio.h> // 定义一个用于更新变量值的函数 void updateVariable(int *varPtr) { *varPtr += 10; // 将指针指向的值增加10 } int main() { int originalValue = 5; printf("Before function call: %d\n", originalValue); // 调用函数并将变量的地址传递过去 updateVariable(&originalValue); printf("After function call: %d\n", originalValue); return 0; } ``` 运行以上代码的结果将是: ``` Before function call: 5 After function call: 15 ``` 在这个例子中,`updateVariable` 接收的是 `originalValue` 的地址,因此它能够在不返回任何值的情况下成功修改原变量的值[^2]。 --- #### 3. **注意项** - 如果不需要修改主函数中的实际变量值,而只是想让函数处理其自身的拷贝,则无需使用指针。 - 当涉及复杂数据结构(如数组或多维数组)时,同样可以通过传递指针的方式来减少不必要的复制开销[^3]。 --- #### 4. **扩展应用——多个变量的同时更新** 对于需要同时更新多个变量的情况,也可以采用类似的策略。例如: ```c #include <stdio.h> void swapValues(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } int main() { int a = 10, b = 20; printf("Before swapping: a=%d, b=%d\n", a, b); swapValues(&a, &b); // 传递两个变量的地址 printf("After swapping: a=%d, b=%d\n", a, b); return 0; } ``` 这段代码展示了如何利用指针完成两个整数之间的交换操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值