You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改传参变量值并同时用其操作数组(C语言)

问题描述

原C代码如下:

#include <stdio.h>

void Func(int a[], int b) {
    a[b] = 1;
    b += 5;
}

int main(void) {
    int a[10];
    int b = 0;
    printf("%d\n", b);
    Func(a, b);
    printf("%d\n", a[0]);
    printf("%d\n", b);
}

期望程序输出:

0
1
5

我尝试把函数参数b改成指针:

void Func(int a[], int *b)

并在函数里写*b += 5,同时把主函数里的调用改成:

int a[10];
int *b = 0;
// ...
Func(a, &b);

请问是否可以同时修改b的值并将其用于数组操作?


注:已参考相关帖子内容


解答

可以实现,但你主函数里的写法有误。主函数不需要把b定义成指针,保持原有的int b = 0即可,调用函数时传&b(即b的地址)给指针参数就行。

修改后的完整代码如下:

#include <stdio.h>

void Func(int a[], int *b) {
    // 先用当前b的值操作数组
    a[*b] = 1;
    // 再修改b的值
    *b += 5;
}

int main(void) {
    int a[10];
    int b = 0;
    printf("%d\n", b);
    Func(a, &b);
    printf("%d\n", a[0]);
    printf("%d\n", b);
}

运行后就能得到你想要的输出:

0
1
5

核心逻辑:

  • 数组操作a[*b]取的是指针b指向的变量当前值(主函数里b的初始值0),给a[0]赋值1。
  • *b +=5直接修改主函数里b的内存值,所以主函数最后打印b会得到5。

你之前主函数里把b定义成int *b = 0是错误的,这会让b变成空指针,传&b给函数后,操作的是指针变量本身,完全偏离了修改整数变量的需求。


内容的提问来源于stack exchange,提问作者DilDeath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:05:20