2016-09-17 2 views
-3

Was im Speicher passiert eigentlich, wennWas passiert intern, wenn ein Wert für die Variable zugewiesen wird und wenn sie von stdin gescannt wird?

  1. int a; a=5;

  2. int a; scanf("%d",&a);

oder warum Scanf & in Werte nehmen verwendet? Kann jemand bitte .. erklären?

+0

Da wir den Kontext Ihrer Hausaufgaben nicht haben, ist es schwierig, es zu tun. Sagte, dass wir keine "tue meine Hausaufgaben" -Seite sind. – Olaf

+1

@Olaf Es ist keine Hausaufgabe. Außerdem spielt es keine Rolle, ob es sich um Hausaufgaben handelt oder nicht. Ich versuche die Dinge zu verstehen. –

+0

Dies wird in so vielen Tutorials, C-Büchern oder Online-Dokumentation erklärt ... – jcoppens

Antwort

1

Es gibt keinen Unterschied, ob es richtig von scanf gefüllt ist, dafür zu sorgen, immer das Ergebnis überprüfen:

if (scanf("%d", &a) == 1) { 
    ... 
} 

Wenn die Benutzereingabe eine gültige Zahl ist, füllt er den Inhalt der Variablen zeigten durch das erste Argument.

Kann jemand bitte .. erklären? (Wenn möglich tisch)

Werfen Sie einen Blick auf Understanding the Stack

+0

Kein Diagramm? Pew, das ist nicht gut, OP müsste das alleine für die Hausaufgaben erledigen ... – Olaf

+0

@Olaf Warum bist du sicher, dass es eine Hausaufgabe ist? –

+0

@ machine_1: Gesunder Menschenverstand? Haben Sie mehr Informationen, die mich irren? – Olaf

0

Um zu verstehen, was notwendig ist, geschieht etwas zu sagen, was Variable bedeutet, als etwas sagen über Zeiger und seine Typen und schließlich erklären, wie funktioniert scanf Werke und warum ist es gut, seinen Rückgabewert zu überprüfen.

Lets fragen, was ist Variable a?

a ist nur Speicheradresse benannt. Wenn Sie Code a eintippen sagt es im Wesentlichen zum Compiler, um Wert zu erhalten, der auf dieser Speicheradresse liegt, was in Ihrem Fall Wert 5 ist.

Also, wenn Sie a passieren funktionieren übergeben Sie nur Wert, der in Ihrem Fall ist 5. Wenn Sie durch die Funktion wollen Wert zu schreiben, in die Variable Sie haben Zeiger auf Ihre Variable a passieren.

Und was ist ein Zeiger?

Zeiger ist nur Speicheradresse mit Informationen über den Datentyp, der auf dieser Speicheradresse liegt.

Warum müssen Sie Info Compiler über den Typ?

Da verschiedene Typen unterschiedliche Größe im Speicher belegen (1B, 2B was auch immer).

Grundsätzlich geben Sie den Typ des Zeigers in Ihrem Funktionsparameter an. Zum Beispiel lässt Funktion f

void f(int* b){ 
    b = 42; 
} 

definieren und rufen Sie die Funktion f wie folgt aus: f (& a); und nach seinem Aufruf ist der Wert der Variablen a42. Aber Funktion scanf ist nicht in diesem Fall weiterlesen ...

Wie funktioniert funktioniert scanf?

Funktion scanf deklariert als:

int scanf (const char * format, ...); 

Diese ... sagt, dass Funktion variable Anzahl von Parametern akzeptiert. So hat am Anfang keine Info über Arten von Parametern und deren Anzahl. Sie müssen also jeden Typ jedes Parameters in der Zeichenfolge format angeben. So

, wenn Sie schreiben:

scanf("%d", &a); 

Sie sagen. „Hey Funktion scanf Ich gebe Ihnen meine Variable Adresse und schreiben Sie mir bitte an diese Adresse Wert der Zahl, die scanf von der Standardeingabe liest und Funktion wissen, dass Zeiger auf Variable a ist Typ int von Format-String %d.

nicht vergessen Rückgabewert der Funktion scanf zu überprüfen

Und außerdem ist es eine gute Angewohnheit, den Rückgabewert der Funktion scanf zu überprüfen, die angibt, ob die Methode erfolgreich war oder fehlgeschlagen ist. (Der Benutzer kann anstelle der Nummer den Text "Hallo" angeben.)

Weitere Informationen über die Funktion scanf und ihren Rückgabewert finden Sie unter in documentation.

+0

** Wenn Sie eine Funktion übergeben, übergeben Sie einfach den Wert, der in Ihrem Fall ist. 5. Wenn Sie möchten, dass die Funktion einen Wert in die Variable schreibt, müssen Sie den Zeiger an Ihre Variable a übergeben. ** Zweifel: Warum ist das? , Um in eine Variable zu schreiben, müssen wir den Zeiger auf die Variable a übergeben? Ist es nicht möglich, ohne Zeiger in einen Speicher [mit dem Namen ** a **] zu schreiben - einfach durch das Schreiben von scanf ("% d", a) ;. Ist es, weil konventionell scanf() so entworfen wurde? Bedeutet dies, dass, wenn das Zeigerkonzept nicht vorhanden wäre, es unmöglich gewesen wäre, die E/A-Operationen in der Sprache C auszuführen? –

+0

int a; a = 5; -> Dabei ist dem Compiler beim Compilieren der Wert 5 bekannt, während scanf ("% d", &a); - in diesem der zu vergebende Wert unbekannt ist Ist der oben genannte Punkt relevant für den Kontext? –

+0

Wenn Sie möchten, dass die Funktion einen Wert zurückgibt, haben Sie in C im Wesentlichen 2 Optionen: Sie können die Anweisung 'return' verwenden oder die Funktionsadresse angeben, wo sie Werte schreiben und scanf ("% d ", &a);) verwenden könnte Die zweite Option –

Verwandte Themen