Zeiger auf Zeiger (ist hier ein Profi!!??)
-
Hallo,
ist hier jemand der sich gut mit Zeigern auskennt?
Es wäre nett, wenn mir jemand das Programmm im Anhang ein bisschen kommentieren kann.
Ich komme damit einfach nicht klar!
#include <stdio.h>
void instr (char *, char, char **);
int main()
{
int dummy;
char txt[]="The quick brown fox jumped over the lazy dog";
char *s0, *s1;
s1=txt;
while (1)
{
s0=s1;puts(s0);
instr(s0,' ',&s1);
if (s1==NULL) break;
s1++;
}
scanf("%d", &dummy);
}
void instr (char *s, char c, char **r)
{
char *p;
*r=NULL;
for (p=s;*p;p++)
if(*p==c){
*r=p;
break;}
}
-
Hallo,
na gut, aber nur, weil ich noch nicht müde bin...:
#include <stdio.h> /* Prototyp fuer instr */ void instr (char *, char, char **); int main(int argc, char *argv[]) { int dummy; char txt[]="The quick brown fox jumped over the lazy dog"; char *s0, *s1; s1=txt; while (1) { /* s0 wird auf s1 gesetzt, da s1 in instr immer geaendert wird, zeigt s0 jeweils auf den naechsten Teil, der nach einem Leerzeichen folgt */ s0=s1; puts(s0); /* instr aufrufen: s0 (= ein char*, Zeiger auf einen String), &s1 (= ein char**, Zeiger auf einen char*) werden uebergeben */ instr(s0,' ',&s1); /* s1 wurde in instr geaendert Abfrage, ob s1 jetzt auf das Null-Byte, den String-Abschluß, zeigt, wenn ja, dann raus aus der Schleife */ if (s1==NULL) break; /* nach dem Aufruf von instr zeigt s1 auf die Stelle, an der das Leerzeichen gefunden wurde, deswegen muß jetzt der Zeiger um eins erhoeht werden, um auf das Zeichen nach dem Leerzeichen zu positionieren */ s1++; } /* eine Moeglichkeit, um das Programm nach der Ausgabe der Strings anzuhalten, damit "man etwas sieht" */ scanf("%d", &dummy); } /* sucht nach dem ersten Vorkommen des Zeichens c im String s, aendert dabei den Zeiger *r (ein char*) so um, daß *r auf das gefundene Zeichen c zeigt */ void instr (char *s, char c, char **r) { char *p; *r=NULL; /* solange kein Nullbyte gefunden wird... */ for (p=s;*p;p++) if(*p==c) { /* diese Zuweisung bewirkt, daß in main die Variable s1 auf das gefundene Zeichen zeigt, denn p zeigt jetzt auch auf das Zeichen c */ *r=p; break; } }
das war jetzt doch mein Schlafmittel, also gute Nacht, oder besser, guten Morgen,
MfG