Fabienne: struct an fuction übergeben in C

Hi zusammen,

kann mir jemand sagen, wie ich in C ein struct an eine Funktion übergebe?

Thanx Fabe

  1. kann mir jemand sagen, wie ich in C ein struct an eine Funktion übergebe?

    Habs selbst rausbekommen....

    Man muss eine temporäre Instanz des structs innerhalb der aufgerufenen Funktion erzeugen

    foo(struct meinstruct temp[10])
    {

    };

    1. Hi,

      man sollte es ja eigentlichnicht tun, aber bevor's noch falsch im Forum steht.

      Man muss eine temporäre Instanz des structs innerhalb der aufgerufenen Funktion erzeugen

      Nein, _muß_ man nicht.

      foo(struct meinstruct temp[10])
      {
      };

      Besser wäre es, einfach nur einen Zeiger zu übergeben:

      ---snip---
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>

      typedef struct list_t{
        char number[5];
        struct list_t *next;
      } list;

      void foo(struct list_t *list){
        while(list != NULL){
          printf("%s\n",list->number);
          list = list->next;
        }
      }

      int main(){

      list *start = NULL, *next = NULL;
        char *liste[] = {
                         "eins",
           "zwei",
           "drei",
           "vier",
           };
        int i = 0;

      /* allozieren des nötigen Speichers */
        start = malloc(sizeof(struct list_t));
        if(start == NULL){
          fprintf(stderr,"malloc() failed at %d\n",__LINE__);
          exit(EXIT_FAILURE);
        }
        /* Setzen eines Zeigers darauf*/
        next = start;

      /* Füllen des Inhalts */
        strcpy(next->number, liste[i]);

      /* Füllen des restlichen Inhalts */
        for(i = 1;i<3;i++){
          next->next = malloc(sizeof(struct list_t));
          if(next->next == NULL){
            fprintf(stderr,"malloc() failed at %d\n",__LINE__);
            exit(EXIT_FAILURE);
          }
          next = next->next;
          strcpy(next->number, liste[i]);
        }
        /* Abschließen der Liste */
        next->next = NULL;

      /* Setzen des Zeigers "next" auf die Startposition der Liste */
        next = start;

      /* Übergabe dieses Zeigers an die Funktion foo(struct list_t *list) */
        foo(next);

      exit(EXIT_SUCCESS);
      }
      ---snap---

      so short

      Christoph Zurnieden