菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP How to W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C 函数参数


参数和实参

信息可以作为参数传递给函数。参数在函数内部充当变量。

参数在函数名之后、括号内部指定。您可以添加任意数量的参数,只需用逗号分隔即可。

语法

returnType functionName(parameter1, parameter2, parameter3) {
  // 要执行的代码
}

在下面的示例中,函数以 name 作为参数,接收一个字符。调用函数时,我们传递一个名字,该名字在函数内部用于打印“Hello”和每个人的名字。

示例

void myFunction(char name[]) {
  printf("Hello %s\n", name);
}

int main() {
  myFunction("Liam");
  myFunction("Jenny");
  myFunction("Anja");
  return 0;
}

// Hello Liam
// Hello Jenny
// Hello Anja
自己动手试一试 »

当一个参数传递给函数时,它被称为实参。因此,从上面的示例中:name 是一个参数,而 LiamJennyAnja实参


多个参数

在函数内部,您可以添加任意数量的参数。

示例

void myFunction(char name[], int age) {
  printf("Hello %s. You are %d years old.\n", name, age);
}

int main() {
  myFunction("Liam", 3);
  myFunction("Jenny", 14);
  myFunction("Anja", 30);
  return 0;
}

// Hello Liam. You are 3 years old.
// Hello Jenny. You are 14 years old.
// Hello Anja. You are 30 years old.
自己动手试一试 »

如果我们考虑前一页的“计算数字之和”示例,我们可以通过使用函数参数来创建一个更可持续的程序。

示例

void calculateSum(int x, int y) {
  int sum = x + y;
  printf("The sum of %d + %d is: %d\n", x, y, sum);
}

int main() {
  calculateSum(5, 3);
  calculateSum(8, 2);
  calculateSum(15, 15);
  return 0;
}
自己动手试一试 »

关于参数的注意事项

请注意,在使用多个参数时,函数调用必须具有与参数相同数量的实参,并且实参必须按相同顺序传递。



将数组作为函数参数传递

您也可以将数组传递给函数。

示例

void myFunction(int myNumbers[5]) {
  for (int i = 0; i < 5; i++) {
    printf("%d\n", myNumbers[i]);
  }
}

int main() {
  int myNumbers[5] = {10, 20, 30, 40, 50};
  myFunction(myNumbers);
  return 0;
}
自己动手试一试 »

示例解释

该函数(myFunction)将其参数(int myNumbers[5])作为一个数组,并使用 for 循环遍历数组元素。

当函数在 main() 中调用时,我们传递 myNumbers 数组,它会输出数组元素。

请注意,当您调用函数时,只需使用数组名称即可将其作为实参传递 myFunction(myNumbers)。但是,在函数参数中需要完整的数组声明(int myNumbers[5])。


返回值

前面示例中使用的 void 关键字表示函数不应返回值。如果您希望函数返回值,可以使用数据类型(如 intfloat 等)代替 void,并在函数内部使用 return 关键字。

示例

int myFunction(int x) {
  return 5 + x;
}

int main() {
  printf("Result is: %d", myFunction(3));
  return 0;
}

// Outputs 8 (5 + 3)
自己动手试一试 »

此示例返回具有两个参数的函数的总和。

示例

int myFunction(int x, int y) {
  return x + y;
}

int main() {
  printf("Result is: %d", myFunction(5, 3));
  return 0;
}

// Outputs 8 (5 + 3)
自己动手试一试 »

您也可以将结果存储在变量中。

示例

int myFunction(int x, int y) {
  return x + y;
}

int main() {
  int result = myFunction(5, 3);
  printf("Result is = %d", result);
  return 0;
}
// Outputs 8 (5 + 3)
自己动手试一试 »

如果我们再次考虑“计算数字之和”的示例,我们可以使用 return 代替,并将结果存储在不同的变量中。这将使程序更加灵活且易于控制。

示例

int calculateSum(int x, int y) {
  return x + y;
}

int main() {
  int result1 = calculateSum(5, 3);
  int result2 = calculateSum(8, 2);
  int result3 = calculateSum(15, 15);

  printf("Result1 is: %d\n", result1);
  printf("Result2 is: %d\n", result2);
  printf("Result3 is: %d\n", result3);

  return 0;
}
自己动手试一试 »

提示:如果您有许多“结果变量”,最好将结果存储在数组中。

示例

int calculateSum(int x, int y) {
  return x + y;
}

int main() {
  // Create an array
  int resultArr[6];

  // Call the function with different arguments and store the results in the array
  resultArr[0] = calculateSum(5, 3);
  resultArr[1] = calculateSum(8, 2);
  resultArr[2] = calculateSum(15, 15);
  resultArr[3] = calculateSum(9, 1);
  resultArr[4] = calculateSum(7, 7);
  resultArr[5] = calculateSum(1, 1);

  for (int i = 0; i < 6; i++) {
    printf("Result%d is = %d\n", i + 1, resultArr[i]);
  }

  return 0;
}
自己动手试一试 »

现实生活中的例子

为了演示使用函数的实际示例,让我们创建一个将华氏度转换为摄氏度的程序。

示例

// 将华氏度转换为摄氏度的函数
float toCelsius(float fahrenheit) {
  return (5.0 / 9.0) * (fahrenheit - 32.0);
}

int main() {
  // 设置一个华氏度值
  float f_value = 98.8;

  // 使用华氏度值调用函数
  float result = toCelsius(f_value);

  // 打印华氏度值
  printf("Fahrenheit: %.2f\n", f_value);

  // 打印结果
  printf("Convert Fahrenheit to Celsius: %.2f\n", result);

  return 0;
}
自己动手试一试 »


×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持