Zeigerproblem



  • Hallo Leute!
    Ich habe ein kleines Problem mit Zeigern.
    Ich programiere mit c und benutze Microsoft Visual c++ und ich finde einfach in folgendem Quellcode den Fehler nicht: 😕

    int iZahl1 = 0, iZahl2 = 0;
    int *ipZeiger1 = &iZahl1, *ipZeiger2 = &iZahl2, *ipTemp = NULL;

    /*Ausgabe der Werte*/

    (Zeile12) printf("\t|Zahl\tZeiger\n--------|-------------\n1\t| %i\t %i\n\t|\n", *ipZeiger1 *ipZeiger1);
    (Zeile 13) printf("2\t| %i\t %i\n\t|\nTemp\t| ---\t %i\n\n\n", *ipZeiger2 *ipZeiger2 *ipTemp);

    Die Fehlermeldung lautet:

    zeigereinführung.c(12): error C2297: '*': Ungültig, da der rechte Operand vom Typ 'int ' ist
    zeigereinführung.c(13): error C2297: '
    ': Ungültig, da der rechte Operand vom Typ 'int *' ist

    Die beiden Zeilen werden einfach garnicht ausgeführt 😞

    Würde mich freuen wenn jemand mir helfen könnte. Danke



  • Wenn du mehrere Wert mit printf ausgeben willst, musst du sie mit Kommas trennen. Leerzeichen reichen da nicht.

    Und in Zeile 12 steht \- im Formatstring. Diese Escapesequenz gibt's nicht.



  • da fehlen die kommata 😉



  • Also ihr seid ja fix hier drin, bevor ich den Beitrag noch editieren konnte und den blöden Backslash entfernt hab schon 2 Antworten 🙂 Danke! Ich bin ein Trottel! Das war ja klar!

    Also zum Hauptfehler....mit den Kommas passiert nun folgndes wenn ich starte:
    Es erscheint

    Zahl Zeiger
    1

    Press any key to continue..

    Die 12te Zeile wird also ausgeführt wie ich es mir gedacht hab.
    (irgendwie werden in dem Beitrag die Leerzeichen nicht angezeigt aber ich denke man sieht was dabei rauskommen soll, so ne art Tabelle)
    Aber hier kommt dann eine Windows Fehlermeldung:

    SE5-1.exe (Name des Projektes) hat ein Problem festgestellt und muss beendet werden.

    Also irgendetwas stimmt mit Zeile 13 nicht! 😞



  • Progboon schrieb:

    int *ipZeiger1 = &iZahl1, *ipZeiger2 = &iZahl2, *ipTemp = NULL;
    ...
    printf("2\t| %i\t %i\n\t|\nTemp\t| ---\t %i\n\n\n", *ipZeiger2, *ipZeiger2, *ipTemp);

    Du versuchst, den NULL-Zeiger zu dereferenzieren. Das kann nur in die Hose gehen.

    PS: sfds



  • Ich bedanke mich bei allen die mir geholfen haben 🙂
    Scheint ein tolles Forum zu sein 👍

    Test:

    #include <stdio.h>
    
    int main ()
    {
    	/*Variablen- und Zeigerdeklaration*/
    
    	int iZahl1 = 0, iZahl2 = 0; 
    	int *ipZeiger1 = &iZahl1, *ipZeiger2 = &iZahl2, *ipTemp = NULL;
    
    	/*Ausgabe der Werte*/
    	printf("Werte nach der Initialisierung:\n\n");
    	printf("\t|Zahl\tZeiger\n--------|-------------\n1\t|  %i\t   %i\n\t|\n", *ipZeiger1, *ipZeiger1);
    	printf("2\t|  %i\t   %i\n\t|\nTemp\t| ---\t   %i\n\n\n", *ipZeiger2, *ipZeiger2, ipTemp);
    
    	/*Einlesen der Zahlen*/
    
    	printf("Zahl 1:\t");
    	scanf("%i",ipZeiger1);
    
    	printf("\n\nZahl 2:\t");
    	scanf("%i",ipZeiger2);
    
    	/*Ausgabe der Werte*/
    	printf("\n\nWerte nach dem Einlesen:");
    	printf("\n\n\n\t|Zahl\tZeiger\n--------|-------------\n1\t|  %i\t   %i\n\t|\n", *ipZeiger1, *ipZeiger1);
    	printf("2\t|  %i\t   %i\n\t|\nTemp\t| ---\t   %i\n\n\n", *ipZeiger2, *ipZeiger2, ipTemp);
    
    	/*Bearbeitung der Werte*/
    
    	*ipZeiger1 = *ipZeiger1 * 2;
    	*ipZeiger2 = *ipZeiger2 + 5;
    
    	/*Ausgabe der Werte*/
    	printf("\n\nWerte nach der Bearbeitung:\n\n");
    	printf("\t|Zahl\tZeiger\n--------|-------------\n1\t|  %i\t   %i\n\t|\n", *ipZeiger1, *ipZeiger1);
    	printf("2\t|  %i\t   %i\n\t|\nTemp\t| ---\t   %i\n\n\n", *ipZeiger2, *ipZeiger2, ipTemp);
    
    	/*Umbiegen der Zeiger*/
    
    	ipTemp = ipZeiger2;
    	ipZeiger2 = &iZahl1;
    	ipZeiger1 = &iZahl2;
    
    	/*Ausgabe der Werte*/
    	printf("Werte nach dem Umbiegen der Zeiger:\n\n");
    	printf("\t|Zahl\tZeiger\n--------|-------------\n1\t|  %i\t   %i\n\t|\n", *ipZeiger2, *ipZeiger1);
    	printf("2\t|  %i\t   %i\n\t|\nTemp\t| ---\t   %i\n\n\n", *ipZeiger1, *ipZeiger2, *ipTemp);
    
    	return 0;
    }
    

    Jetzt geht alles!

    Das war das erste und einfachste Programm von 4 die ich als Hausaufgabe hab.
    Es kann also sein dass ihr mich noch nicht los seid 😉
    Danke nochmals 😃


Anmelden zum Antworten