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
相关产品推荐
相关产品推荐

