值传递与指针传递:深入理解 C 语言参数传递的奥秘

前言

今天学习了风哥的ADC动态窗口采集代码,其中的传参方式让我感到疑惑,特别是不明白为什么要使用指针传参而不是直接传值。这种细节让我困惑了很久,直到在 G 老师的帮助下,终于弄清楚了值传递和指针传递的核心区别以及它们的应用场景。为了加深理解,也为了以后遇到类似问题能够快速回忆起来,我决定把两者的区别和实际应用场景记录下来,与大家分享。


C 语言中的指针传递与值传递

在 C 语言中,函数参数默认是通过值传递的,但在实际编程中,我们常常使用指针传递来解决复杂问题。本文将深入解析这两种方式的本质、区别以及应用场景,帮助大家更好地理解这两个概念。

1. 什么是值传递?

值传递(Call by Value)是 C 语言中默认的函数参数传递方式。它的特点是:

  • 在函数调用时,将实际参数的值复制一份传递给函数。
  • 函数内部操作的是副本,而非实际变量。
  • 函数对参数的任何修改都不会影响原始变量的值。
示例代码:值传递
#include <stdio.h>

void increment_by_value(int count) 
{
   
    count++; // 修改的是count的副本
    printf("Inside function: count = %d\n", count);
}

int main() 
{
   
    int count = 10;
    increment_by_value(count); // 传递值的副本
    printf("After function: count = %d\n", count); // 原值未变
    return 0;
}

运行结果

Inside function: count = 11
After function: count = 10
分析
  • increment_by_value 函数中,count 的值被修改为 11,但这仅仅是副本,原始变量 count 在函数外仍然保持不变。

2. 什么是指针传递?

指针传递(Call by Reference)是通过传递变量的地址(指针)来实现参数的修改。它的特点是:

  • 函数接收的是实际变量的内存地址。
  • 函数内部可以直接通过指针访问并修改原始变量的值。
  • 这种方式允许函数对调用者的变量产生影响。
示例代码:指针传递
#include <stdio.h>

void increment_by_pointer(int *count) 
{
   
    (*count)++; // 修改的是指针指向的实际变量
    printf("Inside function: count = %d\n", *count);
}

int main() 
{
   
    int count = 10;
    increment_by_pointer(&count); // 传递变量的地址
    printf("After function: count = %d\n", count); // 原值被修改
    return 0;
}

运行结果

Inside function: count = 11
After function: count = 11
分析
  • increment_by_pointer 函数中,通过指针 count 的解引用 *count 直接修改了原始变量 count 的值。
  • 函数外部的变量也随之改变。

3. 值传递与指针传递的区别

特性 值传递 指针传递
传递内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值