Maison > développement back-end > C++ > Comment les modifications de paramètres à l'intérieur d'une fonction affectent-elles la fonction appelante en C et C ?

Comment les modifications de paramètres à l'intérieur d'une fonction affectent-elles la fonction appelante en C et C ?

Barbara Streisand
Libérer: 2024-12-18 22:57:18
original
540 Les gens l'ont consulté

How Do Parameter Modifications Inside a Function Affect the Calling Function in C and C  ?

Modification de paramètres au sein des fonctions : impact sur l'appelant

Lors de la modification d'un paramètre au sein d'une fonction, il est crucial de comprendre son effet sur l'appelant . Dans l'extrait de code présenté :

<br>void trans(double x,double y,double theta,double m,double n)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">m=cos(theta)*x+sin(theta)*y;
n=-sin(theta)*x+cos(theta)*y;
Copier après la connexion
Copier après la connexion

}

appeler cette fonction avec trans(center_x,center_y,angle,xc,yc) ne modifie pas directement les valeurs de xc et yc. Cela se produit parce que C transmet les paramètres de la fonction par valeur, ce qui signifie que la fonction reçoit une copie des variables.

Pour résoudre ce problème, vous avez deux options :

1. En C :

Utiliser des références pour passer des paramètres par référence, en modifiant les variables d'origine au sein de la fonction :

<br>void trans(double x, double y, double thêta, double& m, double& n)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">m=cos(theta)*x+sin(theta)*y;
n=-sin(theta)*x+cos(theta)*y;
Copier après la connexion
Copier après la connexion

}

2. En C :

Passez les paramètres en passant explicitement leurs adresses à l'aide de pointeurs :

<br>void trans(double x, double y, double theta, double<em> m, double</em> n)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*m=cos(theta)*x+sin(theta)*y;
*n=-sin(theta)*x+cos(theta)*y;
Copier après la connexion

}

Avec ces modifications, l'appel de trans(center_x,center_y,angle,xc,yc) mettra directement à jour les valeurs de xc et yc. Si ce comportement est souhaité, l'utilisation de références ou de pointeurs est nécessaire pour obtenir l'effet souhaité.

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!

source:php.cn
Article précédent:Comment le XORing avec 32 convertit-il efficacement la casse en ASCII ? Article suivant:Comment supprimer en toute sécurité des éléments d'un std :: list lors d'une itération ?
Déclaration de ce site Web
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
Derniers articles par auteur
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal