Maison  >  Article  >  développement back-end  >  La relation entre les méthodes de transmission des paramètres de fonction C++ et les fonctions de paramètres variables

La relation entre les méthodes de transmission des paramètres de fonction C++ et les fonctions de paramètres variables

WBOY
WBOYoriginal
2024-04-13 08:30:01702parcourir

Les méthodes de passage de paramètres de fonction incluent le passage de valeurs, le passage de références et le passage de pointeurs. Les fonctions de paramètres variables ne peuvent transmettre des paramètres que par le passage de pointeurs, car la fonction doit connaître l'adresse de la partie paramètre variable. Par exemple, la fonction sum() utilise ... pour accepter un nombre inconnu d'arguments, puis utilise la macro va_arg() pour obtenir la valeur de l'argument variadique.

C++ 函数参数传递方式与可变参数函数的关系

La relation entre les méthodes de transmission des paramètres de fonction C++ et les fonctions de paramètres variables

En C++, les paramètres de fonction peuvent être transmis à la fonction par valeur, référence ou pointeur. Ces différentes méthodes de passage ont un impact significatif sur le comportement des paramètres au sein de la fonction, et affectent également l'utilisation des fonctions variadiques.

Méthode de transmission des paramètres de fonction

  • Transmission de valeurs : Une copie du paramètre est transmise à la fonction, et toute modification de la copie n'affectera pas les variables externes.
  • Passage par référence : L'adresse du paramètre est passée dans la fonction, et les modifications apportées aux paramètres affecteront directement les variables externes.
  • Passage du pointeur : L'adresse du paramètre est transmise à la fonction et le pointeur peut être utilisé pour modifier des variables externes ou accéder aux membres de variables externes.

Fonctions variadiques

Les fonctions variadiques permettent à une fonction d'accepter un nombre inconnu de paramètres. Ils utilisent la syntaxe spéciale ... pour indiquer les parties variadiques. ... 来指示可变参数部分。

函数声明:

int sum(int count, ...);

函数调用:

int result = sum(3, 1, 2, 3);

传递方式与可变参数函数的关系

对于可变参数函数,只能使用指针传递参数,因为函数必须知道可变参数部分的地址。因此,可变参数函数的参数总是以 指针传递 的方式传入函数。

实战案例

以下代码展示了如何使用可变参数函数计算数字的总和:

#include <cstdarg>
#include <iostream>

int sum(int count, ...) {
  va_list args; // 可变参数列表
  va_start(args, count); // 初始化可变参数列表,count 为固定参数

  int sum = 0;
  for (int i = 0; i < count; i++) {
    sum += va_arg(args, int); // 获取可变参数,将其转换为 int
  }

  va_end(args); // 清理可变参数列表

  return sum;
}

int main() {
  // 调用可变参数函数
  int result = sum(3, 1, 2, 3);
  std::cout << result << std::endl; // 输出结果
}

此代码中,sum() 函数使用指针方式传递可变参数 ...,并使用 va_arg()

Déclaration de fonction : 🎜rrreee🎜Appel de fonction : 🎜rrreee🎜🎜La relation entre la méthode de transfert et la fonction de paramètre variable🎜🎜🎜Pour la fonction de paramètre variable, vous ne pouvez utiliser que des pointeurs pour passer des paramètres, car la fonction doit connaître le adresse de la partie paramètre variable. Par conséquent, les paramètres des fonctions variadiques sont toujours transmis à la fonction au fur et à mesure que le 🎜pointeur passe🎜. 🎜🎜🎜Cas pratique🎜🎜🎜Le code suivant montre comment utiliser la fonction paramètre variable pour calculer la somme des nombres : 🎜rrreee🎜Dans ce code, la fonction sum() utilise des pointeurs pour passer la variable settings... et utilisez la macro va_arg() pour obtenir la valeur de l'argument variable. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn