软件帮帮网
柔彩主题三 · 更轻盈的阅读体验

指针操作函数参数:程序员日常中的实用技巧

发布时间:2025-12-16 08:56:55 阅读:326 次

写代码时,经常遇到需要修改变量值的场景。比如你在做一个小工具,想通过一个函数把某个数值翻倍,结果发现函数里改了,外面还是老样子。这时候问题很可能出在函数参数的传递方式上。

为什么普通传参改不了变量?

假设你写了这样一个函数:

void doubleValue(int x) {
    x = x * 2;
}

然后在主函数中调用:

int num = 5;
doubleValue(num);
// 此时num还是5

原因很简单:C语言默认是值传递,函数拿到的是变量的“复印件”,改它不影响原变量。

指针登场:直接操作内存地址

要真正改变外部变量,就得让函数知道它的内存地址。这就是指针的作用。把上面的函数改成指针传参:

void doubleValue(int* ptr) {
    *ptr = *ptr * 2;
}

调用时传地址:

int num = 5;
doubleValue(&num);
// 现在num变成了10

这里 *ptr 表示取指针指向的值,&num 是取变量num的地址。这样一来,函数就能直接操作原始数据了。

实际应用场景

这种技巧在处理结构体、动态数组或者需要返回多个值的时候特别有用。比如你想同时得到除法的商和余数:

void divide(int a, int b, int* quotient, int* remainder) {
    *quotient = a / b;
    *remainder = a % b;
}

调用时:

int q, r;
divide(10, 3, &q, &r);
// q = 3, r = 1

这种写法比单独写两个函数清晰多了,尤其在封装底层逻辑时很常见。

小心使用,避免崩溃

指针虽强,但用不好容易出事。最常见的就是传了空指针(NULL)进去,程序直接崩掉。所以写这类函数时最好加个判断:

void setValue(int* ptr, int val) {
    if (ptr != NULL) {
        *ptr = val;
    }
}

别嫌麻烦,这一行检查能省去很多调试时间。

在开发小工具或性能敏感的模块时,合理使用指针传参,能让代码更高效、接口更灵活。关键是理解清楚:你要传的是“值”还是“位置”。搞明白这点,很多问题就迎刃而解了。