Aktualisierung einer globalen Variablen in C
Ich habe ein Anfänger-C Frage. Ich möchte in dem folgenden code...
include <stdio.h>
void iprint();
int i=0;
int main()
{
int j;
for (j=0; j<50; j++)
{
iprint(i);
printf("%d\n",i);
}
}
void iprint(i)
{
i +=1;
//printf("%d\n",i);
}
... die Funktion "iprint" um den Wert zu aktualisieren, der ich jedes mal heißt es, wie update ich das so, dass es kann verwendet werden, im wesentlichen mit dem Wert 1 für die iteration 2 und 3 für die iteration 2 usw.
Ich erreichte dies, indem Sie den code zu diesem:
include <stdio.h>
int iprint();
int i=0;
int main()
{
int j;
for (j=0; j<50; j++)
{
i= iprint(i);
printf("%d\n",i);
}
}
int iprint(i)
{
i +=1;
//printf("%d\n",i);
return(i);
}
Muss ich zurückgeben(ich) passieren, dass zu machen? Der Grund für die Nachfrage, ist, dass wenn ich habe eine Menge von Funktionen, die mit ich, es ist ein wenig ärgerlich, dass pass ich zwischen Ihnen. Wenn Sie stattdessen irgendwie aktualisieren könnte ich wie aktualisieren Sie eine Globale variable in matlab, das wäre toll. Ist es möglich?
- Es ist möglich, aber nicht unbedingt eine gute Idee...
- Dies ist nicht einmal syntaktisch korrekt ist. Tut das eigentlich kompilieren? (nicht zu erwähnen die Verwendung von globalen Variablen ist generell ein schlechter Geruch )
- Entfernen Sie einfach das argument von iprint.
- möglich, Duplikat der Zeiger in C und wie gehen lokale Variablen, die als Zeiger
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einen Zeiger auf die Globale variable. Ändern Sie den Zeiger mit dem Wert. Das ist es
Das problem mit dem ersten ist, dass Sie übergeben der variable als argument an die Funktion, so dass, wenn die Funktion ändert die variable es ist nur das ändern der eigenen lokalen Kopie und nicht die Globale variable. Das ist die lokale variable
i
Schatten wird die Globale variablei
.Nicht zu erwähnen, dass Sie eigentlich nicht erklären das argument richtig, so dass Ihre Programm nicht einmal kompilieren.
i
z.B.void iprint( int *i ) { *i += 1 }
und ruftiprint( &i );
.Brauchen Sie nicht auf pass von globalen Variablen als Parameter.
Wenn Sie deklarieren Sie einen parameter oder eine lokale variable mit dem gleichen Namen wie die Globale variable, Sie wird ausblenden der globalen variable.
hätte man erhöht den Wert von i in der main-Funktion selbst.
Durch die Art und Weise ändern Sie die Funktion
die Anweisung
Dies geschieht so, weil Sie auf der Durchreise sind Wert in der Funktion von 'pass per value' - Methode, wo eine Kopie der variable gemacht wird. Wenn Sie erhöhen die ich iprint-Methode Kopie der globalen variable i wird um eins erhöht. Die Globale variable bleibt intakt.
Muss versuchen, diesen code