[Grundlagen der C-Sprache] Formale Teilnahme und tatsächliche Parameter von Funktionen

Formale Parameter: Formale Parameter.
Tatsächliche Parameter: Tatsächliche Parameter.
Der größte Unterschied zwischen den beiden: Formale Parameter sind reine Werkzeuge, und ihr Speicher wird nach der Verwendung freigegeben, während tatsächliche Parameter Daten sind, die immer einen Platz im Speicher belegen Sie haben seine Adresse, Sie können seinen Wert finden.

Ich habe im Internet gesucht und es gibt überall Blogs über den Unterschied zwischen formalen Parametern und tatsächlichen Parametern. Basierend auf meiner aktuellen Erfahrung in Kombination mit der Ingenieurspraxis besteht der größte Unterschied zwischen formalen Parametern und tatsächlichen Parametern darin, dass ihre Bereiche nicht gleich sind.
Zum Beispiel der folgende Code:

#include "stdio.h"

int NMSL = 5;
void Change_Mom(int a)
{
    
     
  a = 0;
}
int main()
{
    
    
 int MNSL = 5;
 Change_Mom(NMSL);
 Change_Mom(MNSL);
 return ;
}

Entschuldigung, wer wird in NMSL und MNSL 0? Tatsächlich wird dies auch nicht der Fall sein, da sie bereits Kopien davon sind, wenn sie an die Funktion übergeben werden, und nicht sich selbst. Änderungen an diesem Wert werden nicht auf sich selbst übertragen. Was ist, wenn dies der Fall ist?

#include "stdio.h"

int NMSL = 5;
void Change_Mom(void)
{
    
     
  NMSL = 0;
  MNSL = 0;
}
int main()
{
    
    
 int MNSL = 5;
 Change_Mom();
 return ;
}

Leider ist dieser Code ungültig, da MNSL eine lokale Variable ist, die in der Main-Funktion erstellt wird. Wie kann Change_Mom den Sohn der Main-Funktion erkennen? Wenn Sie jedoch MNSL = 0 ausblenden, kann es normal ausgeführt werden, und Sie werden feststellen, dass der Wert von NMSL 0 wird. Der Grund dafür ist, dass diese Funktion keine Variableneingabe verwendet, sondern NMSL direkt aufruft, indem sie Es ist es selbst und es ist eine globale Variable. Theoretisch können Sie ihren Wert finden, solange Sie ihre RAM-Adresse im Mikrocontroller haben. Was passiert also, wenn ich den Wert einer Variablen ändern muss, nachdem sie an eine Funktion übergeben wurde? Kann wie folgt durchgeführt werden:

#include "stdio.h"

int NMSL = 5;
void Change_Mom(int *a)
{
    
     
 *a = 0;
}
int main()
{
    
    
 int MNSL = 5;
 Change_Mom(&MNSL);
 return ;
}

Das Prinzip dabei ist: Ich übergebe die Adresse der lokalen Variablen im Speicher und ändere direkt den Wert der Variablen unter der Adresse, was dem direkten Eintreten meines FBI gegen die Tür seines Hauses entspricht. Manche Leute werden sagen: „UP-Meister, Sie sind reine Täuschung, ich schreibe offensichtlich ein Array hinein und muss keine Adresse übergeben, um den Wert darin zu ändern, zum Beispiel: #include „stdio.h

void Change_Mom(int arr[])
{ arr[0] = 1; } int main() { int arr[2]={0,1}; Change_Mom(arr); return ; } Ich glaube, du verstehst es nicht all , der Array-Name ist die Adresse des ersten Elements des Arrays. Vor acht Generationen wurde Ihre Adresse an das FBI übergeben! Welches der Arrays Sie sind, können Sie anhand der Adresse des ersten Elements vergleichen. Wie dem auch sei, das Array muss kontinuierlich sein! Weitere Einzelheiten finden Sie unter: https://blog.csdn.net/qq_61558455/article/details/126803970










Guess you like

Origin blog.csdn.net/qq_32006213/article/details/128818887