C Probleme mit dem Thema Zeiger

Folgende Aufgabe:

Geben Sie die Ausgabe des folgenden Programms an!

#include <stdio.h>
main()
{
int x,y,z;
int *ptr1,*ptr2,*ptr3;
x=3;
y=4;
ptr3=&y;
*ptr3+=2;
z=5;
ptr2=ptr3;
ptr1=&x;
*ptr2=((*ptr1)++)–1;
ptr3=&z;
– –*ptr3;
*ptr3–=3*(*ptr2–*ptr1);
printf("%i %i %i",x,y,z);
}


herauskommen soll X=4, Y=2, Z=10,

Kann mir vielleicht jemand hinter jede Zeile schreiben was für ein Wert x, y, z hat?
Ich komme immer auf falsche Ergebnisse.

Danke
 
AW: C Probleme mit dem Thema Zeiger

Die Lösung ist nicht korrekt.

Code:
#include <stdio.h>

int main()
{
	int x,y,z;
	int *ptr1,*ptr2,*ptr3;
	x=3;				// x=3
	y=4;				// y=4
	ptr3=&y;
	*ptr3+=2;		     // y=6
	z=5;				// z=5
	ptr2=ptr3;
	ptr1=&x;
	*ptr2=((*ptr1)++)-1;	 // x=4, y=2
	ptr3=&z;
	- -*ptr3;
	*ptr3-=3*(*ptr2-*ptr1);	// z=11
	printf("%i %i %i",x,y,z);
}

Ausgabe: 4 2 11
 
AW: C Probleme mit dem Thema Zeiger

kannst du mir vielleicht die 2 zeilen mal ausführlich aufschreiben.
verstehe nicht so ganz wie du da auf die werte kommst.

*ptr2=((*ptr1)++)-1; // x=4, y=2

*ptr3-=3*(*ptr2-*ptr1); // z=11


Danke
 
AW: C Probleme mit dem Thema Zeiger

@Jan
Ich bin der Meinung das die Lösung richtig ist.

Ich bekomme x=4, y=2, z=10.

@Speedy

Bei den beiden Zeilen ist nur wichtig das man den Unterschied zwischen Postinkrement und Präinkrement kennt.

Bei Postinkrement wird erst der Schleifenkörper durchlaufen und dann addiert, bei Präinkrement ist das genau umgekehrt.

Also bei:

*ptr2=((*ptr1)++)-1;

Erst wird (*ptr1)-1 ->*ptr2 zugewiesen und dann wird *ptr1 um eins erhöht.

Ausgeschrieben ohne Zeiger:

y=x-1; //x=3, y=2
x=x+1; //x=4

und bei:

*ptr3-=3*(*ptr2-*ptr1);

Ausgeschrieben: *ptr3=*ptr3-3*(*ptr2-*ptr1);

Ohne Zeiger:

z=z-3*(y-x); // z=4, y=2, x=4

z=10;


Gruss
 
AW: C Probleme mit dem Thema Zeiger

Hallo also mein guter alter Microsoft Visual C++ 6.0 Compiler sagt auch 4 2 10,
lasst es mich aber morgen mal in aller Ruhe durchdenken.

Nach 3 Weizen ist des bei mir nimmer möglich :LOL:

Grüßle Chris
 
AW: C Probleme mit dem Thema Zeiger

Ergänzung zu meinem vorherigen Beitrag:

Hackt das mal so ein und sagt mir was ihr als antwort bekommt, gerade mit dem Visual Studio 2005 bitte.

Danke

#include <stdio.h>
main()
{
int x = 3;
int y = 4;
int z = 5;
int *ptr1,*ptr2,*ptr3;

ptr3 = &y; // 4

*ptr3 += 2; // ptr3 = 6

printf("Pointer3 = %d\n\n", *ptr3);

ptr2 = ptr3; // ptr2 = 6

ptr1 = &x; // ptr1 = 3

printf("Pointer1 = %d\n\n", *ptr1 );

*ptr2 = ((*ptr1)++)-1; // ptr2 = 2

printf("Pointer2 = %d\n\n", *ptr2 );

ptr3 = &z; // ptr3 = 5

printf("Pointer3 = %d\n\n", *ptr3 );

--*ptr3; // ptr3 = 4 = z

printf("Pointer3 = z = %d\n\n", *ptr3 );

*ptr3 -= 3*(*ptr2-*ptr1); // ptr3 = 10

printf("Pointer3 = z = %d\n\n", *ptr3 );


printf("x = %i, y = %i, z = %i\n",x,y,z);

return 0;
}
 
AW: C Probleme mit dem Thema Zeiger

Ergänzung zu meinem vorherigen Beitrag:

Hackt das mal so ein und sagt mir was ihr als antwort bekommt, gerade mit dem Visual Studio 2005 bitte.

Danke

Hi,

da kommt bei mir folgendes raus:
X=4, Y=2, Z=10

seltsamerweise komme ich auf das gleiche Ergebnis mit dem Ursprünglich von Speedy geposteten Code o_O (mit Visual C++ 2005 als auch mit 6.0!).

Gruß Markus
 
Zuletzt bearbeitet:
AW: C Probleme mit dem Thema Zeiger

Glaub ich dir net, weil bei ihm das return 0; fehlt, dann sagt er nämlich funktion erwartet einen Wert als Rückgabe, aber das sei mal so dahingestellt!

Ok, ich hab nämlich mit dem Visual 6.0 Compiler auch das Ergebnis!

Also würde ich mal frech behaupten, dass das Ergebnis so korrekt ist und die 1. Erklärungen stimmen.

ok dann ist z = 11 false !!!!!!

Würde diesem auch zustimmen, falls mich jemanden fragen sollte;)

Grüßle
 
Zuletzt bearbeitet:

Jobs

Jobmail abonieren - keine Jobs mehr verpassen:

Ich möchte die wöchentliche Jobmail erhalten und akzeptiere die Datenschutzerklärung.
Du kannst die Jobmail jederzeit über den Link in der Mail abbestellen.

Wir verwenden Sendinblue als unsere Marketing-Plattform. Wenn Du das Formular ausfüllst und absendest, bestätigst Du, dass die von Dir angegebenen Informationen an Mailchimp zur Bearbeitung gemäß den Nutzungsbedingungen übertragen werden.

Top