S
Tauboga schrieb:
char* p="0123456789";
puts(p+1); //Ausgabe 123456789
puts((*p)+1); //keine Ahnung ???
*p ist '0'
und '0' + 1 ist '1'
aber ich muss zugeben hier einen fehler gemacht zu haben.
statt puts((*p)+1); muss es putchar((*p)+1); heissen (sorry, war spaet in der nacht)
die ausgabe ist somit '1'
bei puts((*p)+1); wuerde bloedsinn rauskommen.
void twice(int* i)
{
//was ist richtig
i += *i;
*i += i;
i += i;
*i += *i; //ist richtig
korrekt
int i=2;
int* p=&i;
i=3;
printf("%d\n",*p); //Ausgabe 2
printf("%p\n",p); //Ausgabe Adresse von 2
int arr[]={1,2,3};
p=arr;
printf("%d\n",*p); Ausgabe 1
printf("%d\n",p[0]); Ausgabe 1
}
falsch.
p zeigt auf i, wenn wir jetzt i aendern, dann zeigt p immer noch auf i, und somit auf den neuen wert von i - die antwort muss also
//Ausgabe 3
//Ausgabe Adresse von i
heissen
die unteren beiden sind korrekt
int i1=2;
int i2=2;
int* p1=&i1;
int* p2=&i2;
if(p1==p2)
{
puts("gleich"); //Ausgabe gleich
}
else
{
puts("ungleich");
}
falsch
denn p1==p2 vergleich ob die zeiger auf die selbe adresse zeigen.
waere dort if(*p1==*p2) gestanden, waeren sie gleich, denn i1==i2
Aber hier werden die Adresse von i1 und i2 verglichen
also quasi
if(&i1==&i2)
char* p="Hallo";
char* p2="Welt";
char* p3=p+p2; Vielleicht so char *p3=(*p)+(*p2);
das war fies - da hast du raten muessen.
die antwort ist: es geht nicht, denn eine adresse + eine andere adresse ergibt bloedsinn
du hast hier 'H'+'W' gerechnet, also die beiden buchstaben addiert, ergibt natuerlich auch bloedsinn.
Zeiger kann man nicht addieren, nur subtrahieren.
Fazit:
du hast es noch nicht ganz verstanden, bist aber schon auf einem gute weg dorthin
wenn du
A Tutorial on Pointers and Arrays in C
durchgelesen hast, dann hast du zeiger wahrscheinlich wirklich verstanden.
Zeiger sind ein sehr kompliziertes Thema, aber du bist auf dem richtigen weg - nicht entmutigen lassen.