1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Strukturen&Pointer

    • Frage
  • Synox
  • 10. April 2005 um 22:20
  • Unerledigt
  • Synox
    3
    Synox
    Mitglied
    Punkte
    75
    Beiträge
    10
    • 10. April 2005 um 22:20
    • #1

    Hallo zusammen.
    Wir nehmen derzeit die Pointer in unserem C-Kurs durch und werden ab nächste Woche im Zuge dazu auch mit Strukturen arbeiten.
    Da ich so fleissig bin :lol: wollte ich schon mal vorarbeit leisten und habe ein Programm geschrieben und Variablen aus einer Struktur einzulesen und auszulesen.

    C
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
    
    
    struct personentyp
    {
    
    
    		int mnr;
    		char name[30];
    		char tel[30];
    
    
    };
    
    
    void main()
    {
    
    
    		int anz=1;
    		int i=0;
    		int b=0;
    
    
    
    
    		personentyp p[5];
    
    
    
    
    					for(i=0;i<=4;i++) {
    
    
    
    
    					printf("Mitarbeiternummer: %d",b+1);
    					p[i].mnr=b+1;
    					printf("\nName: ");
    					gets (p[i].name);
    					if (strlen(p[i].name)==0) break;
    					printf("Telefon: ");
    					gets (p[i].tel);
    
    
    					anz++;
    					b++;
    
    
    					}
    
    
    
    
    
    
    					for (i=0;i<=4;i++){
    
    
    					printf ("\n\nNummer: %d",p[i].mnr);
    					printf ("\n\nName: %s",p[i].name);
    					printf ("\n\nTelefon: %s",p[i].tel);
    
    
    					}
    
    
    }
    Alles anzeigen

    In dem Programm hab ich dann versucht einen Pointer einzubauen.


    C
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
    
    
    struct personentyp
    {
    
    
    		int mnr;
    		char name[30];
    		char tel[30];
    
    
    };
    
    
    void main()
    {
    
    
    		int anz=1;
    		int i=0;
    		int b=0;
    
    
    
    
    		personentyp p[5];
    
    
    		int *ptr=p;
    
    
    					for(i=0;i<=4;i++){
    
    
    
    
    					printf("Mitarbeiternummer: %d",b+1);
    					*ptr.mnr=b+1;
    					printf("\nName: ");
    					gets (*ptr.name);
    					if (strlen(*ptr.name)==0) break;
    					printf("Telefon: ");
    					gets (*ptr.tel);
    
    
    					anz++;
    					b++;
    
    
                   ptr++;
    
    
    					}
    
    
    
    
    
    
    					for (i=0;i<=4;i++){
    
    
    					printf ("\n\nNummer: %d",*ptr.mnr);
    					printf ("\n\nName: %s",*ptr.name);
    					printf ("\n\nTelefon: %s",*ptr.tel);
    
    
    					}
    
    
    }
    Alles anzeigen

    Hätte mich auch gewundert, wenn das so funktionieren würde.
    Kann mir vielleicht jemande helfen?
    Oder mir zumindest kurz erklären wie ich Strukturen und Pointer zusammen arbeiten?

    Danke!

    Synox

  • Ubik
    5
    Ubik
    Mitglied
    Punkte
    205
    Beiträge
    39
    • 11. April 2005 um 10:16
    • #2

    Mit int *ptr=p holst du dir einen int-Zeiger auf das 5-elementige Array von Strukturen.
    Du brauchst aber einen Zeiger vom Typ personentyp.
    Wenn du stattdessen personentyp *ptr=&p[i] schreibst und das ganze in die for-Schleife ziehst, sollte es klappen. Damit holst du dir (in jedem Durchlauf) einen Zeiger auf die gewünschte Struktur im Array.

    Anm.: p ist selbst ein Zeiger auf das Array

  • Dimitrij
    7
    Dimitrij
    Mitglied
    Reaktionen
    12
    Punkte
    437
    Beiträge
    73
    • 11. April 2005 um 12:33
    • #3

    Das erste Programm dürfte meiner Meinung nach auch nicht funktionieren.
    Statt

    Code
    personentyp p[5];


    muss man schreiben:

    Code
    struct personentyp p[5];


    So kann man's mit Pointern machen:

    Code
    #include <stdio.h> 
    
    
     struct personentyp {
       int mnr; 
       char name[30];
       char tel[30];
     };
    
    
     void main() {
       int anz=1;
       int i=0;
       int b=0;
       struct personentyp p[5];
       for(i=0;i<=4;i++) {
    	 struct personentyp *ptr=&p[i]; //oder:  struct personentyp *ptr=p+i;
    	 printf("Mitarbeiternummer: %d",b+1);
    	 p->mnr=b+1;				 //oder: (*p).mnr=b+1;
    	 printf("\nName: ");
    	 gets (p->name);
    	 if (strlen(p->name)==0)
    	   break;
    	 printf("Telefon: ");
    	 gets (p->tel);
    	 anz++;
    	 b++;
       }
       for (i=0;i<=4;i++){
    	 struct personentyp *ptr=&p[i];
    	 printf ("\n\nNummer: %d",p->mnr); 
    	 printf ("\n\nName: %s",p->name);
    	 printf ("\n\nTelefon: %s",p->tel);
       }
     }
    Alles anzeigen

    de.lernu.net, lingwadeplaneta.info

  • Synox
    3
    Synox
    Mitglied
    Punkte
    75
    Beiträge
    10
    • 12. April 2005 um 19:19
    • #4

    Nochmal hallo zusammen!

    Danke für eure Hilfe.
    PixelPatron: Danke für deinen Code! Hab deinen Code genommen und etwas abgeändert.

    C
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
    
    
    struct personentyp
    {
    
    
    		int mnr;
    		char name[20];
    		char tel[20];
    
    
    };
    
    
    int main()
    {
    
    
    		int anz=1;
    		int i=0;
    
    
    		int b=0;
    
    
          struct personentyp p[5], *ptr;
    		ptr = p;
    
    
    		for(i=0;i<=3;i++){
    
    
    
    
    
    
    
    
    		printf("\nMitarbeiternummer: %d",b+1);
    		p->mnr=b+1; 									//(*p).mnr=b+1;	Pointer auf mnr
    
    
    		printf("\nName: ");
    		gets(p->name);									//gets((*p).name);	Pointer auf name
    		if (strlen(p->name)==0) break;			//if (strlen((*p).name)==0) break;	Pointer auf name
    															//												zur Leerstring Erkennung
    		printf("\nTelefon: ");
    		gets(p->tel);
    
    
    		b++;
    		anz++;
    		ptr++;
    
    
    		}
    
    
    
    
    			for (i=0;i<=4;i++){
    
    
    			printf ("\n\nNummer: %d",p->mnr);
    			printf ("\n\nName: %s",p->name);
    			printf ("\n\nTelefon: %s",p->tel);
    			ptr++;
    
    
    			}
    }
    Alles anzeigen

    Funzt alles was ich brauche.

    Nochmals danke!

    bye

    Synox

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung