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

C语言值传递参数后返回修改值的技术疑问与误解澄清

关于C语言按值传递参数并返回的编程实践疑问

我正在学习C语言课程,老师表示出于技术原因,将参数按值传递(passing by value)给函数并返回修改后的参数并非良好编程实践,但未说明具体技术原因。我了解值传递和引用传递(passing by reference)的区别及用法,却无法理解为何在某些场景下不能从main函数按值传递参数至函数,修改后再返回至main。

以下是我的代码:

#include <stdio.h>
#include <string.h>

void askName(char *pName) {
    printf("Enter a name, maximum 20 characters: ");
    fgets(pName, 20, stdin);
    pName[strlen(pName)-1] = '\0';
    return;
}

float askDecimals(float sum, int count) {
    float decimal;
    for (int i = 0; i < count; i++) {
        printf("Enter a decimal number: ");
        scanf("%f", &decimal);
        getchar();
        sum = sum + decimal;
    }
    return sum;
}

void printInfo(int count, char *pName, float sum, float avg) {
    printf("You entered the name: %s.\n", pName);
    printf("You entered the number: %d.\n", count);
    printf("The sum of the decimal numbers was: %f.\n", sum);
    printf("The average of the decimal numbers was: %.2f.\n", avg);
    return;
}

int main(void) {
    char name[20];
    int count;
    float sum = 0;
    float avg;
    askName(name);
    do {
        printf("Enter a positive integer: ");
        scanf("%d", &count);
        getchar();
        if (count <= 0) {
            printf("You must enter a positive integer. Please try again.\n");
        }
    } while (count <= 0);

    sum = askDecimals(sum, count);
    avg = sum / count;
    printInfo(count, name, sum, avg);

    return 0;
}

老师评价:“因为askDecimals中的sum是值参数(按值传递),无法向调用程序传递信息”。

我明白在main中声明sum并按值传递给askDecimals是不良实践,应在askDecimals内部声明sum,但我误解老师的意思为‘绝对不能按值传递参数并返回’,希望纠正该误解并了解相关技术原因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:22:33