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


Anmelden zum Antworten