Pointer in Funktionen



  • Hi,

    Ich möchte aus einer Funktion auf die Arraywerte der Hauptfunktion zugreifen,
    weiss jedoch nicht wie das genau geht.

    Ich galube es müsste sowas sein:

    int main(int argc, char *argv[])
    {
    int arr[3]={0,0,0};

    void funkt**(arr)**;

    printf("%d %d %d",arr[0],arr[1],arr[2]);

    system("PAUSE");
    return 0;
    }

    void funkt(int *arr[])
    {
    *arr[0]=1;
    *arr[1]=2;
    *arr[2]=3;
    }
    es gibt aber nur die drei 0 aus.
    Ich glaube beim Fettgeschriebenen stimmt was nicht.
    Kann mir jemand sagen,wo der Fehler liegt?



  • void funkt (int* arr);
    
    int main
      (int, char*[])
    {
      int arr[3] = {0,0,0};
    
      funkt (arr);
    
      printf ("%d %d %d\n", arr[0], arr[1], arr[2]);
    
      system ("PAUSE");	
      return 0;
    }
    
    void funkt
      (int* arr)
    {
      arr[0] = 1;
      arr[1] = 2;
      arr[2] = 3;
    }
    

    Zwei Fehler:
    1. int[3] kannst du als int* übergeben, nicht als int*[]
    2. Du hast in deiner main-Funktion die Funktion funct deklariert (Prototyp), anstatt sie auszuführen.

    Bitte den C/C++-Highlighter benutzen.



  • Danke für die schnelle Hilfe, jetzt komm ich endlich weiter.



  • Neku: deine main() funktion hat einen verkrueppelten kopf.

    so geht das:

    void funkt(int *arr);
    
    int main(void)
    {
      int arr[3] = {0, 0, 0};
    
      funkt(arr);
    
      printf("%d %d %d\n", arr[0], arr[1], arr[2]);
    
      return 0;
    }
    
    void funkt(int *arr)
    {
      arr[0] = 1;
      arr[1] = 2;
      arr[2] = 3;
    }
    


  • Ist es bei ANSI C noch nicht erlaubt, die Namen von Funktionsparametern weg zu lassen?



  • Neku schrieb:

    Ist es bei ANSI C noch nicht erlaubt, die Namen von Funktionsparametern weg zu lassen?

    du clown... wie willst du sonst auf selbige zugreifen, wenn du sie nicht benannt hast?



  • c.rackwitz schrieb:

    Neku schrieb:

    Ist es bei ANSI C noch nicht erlaubt, die Namen von Funktionsparametern weg zu lassen?

    du clown... wie willst du sonst auf selbige zugreifen, wenn du sie nicht benannt hast?

    Darum geht es ja gerade - er verwendet sie nicht, weswegen ich sie weggelassen habe. Das habe ich mir angewöhnt, da MSVC++ bei unreferenzierten Variablen stets eine Warnung ausgibt (W4).



  • Hi!

    Dann nimm doch ganz einfach:

    int main( void )
    

    Das ist ebenfalls erlaubt und du sparst dir sogar tipparbeit! 😉

    grüße



  • Neku schrieb:

    Ist es bei ANSI C noch nicht erlaubt, die Namen von Funktionsparametern weg zu lassen?

    lol
    Neku darf ich dir mal was sagen, versuch doch nicht alles, was du gerade mal nicht benutzt, als unwichtig abzustempeln (ich erinner mich da an die threads mit zeigern, virtuellen funktionen etc...) 😉



  • ser1al schrieb:

    Neku schrieb:

    Ist es bei ANSI C noch nicht erlaubt, die Namen von Funktionsparametern weg zu lassen?

    lol
    Neku darf ich dir mal was sagen, versuch doch nicht alles, was du gerade mal nicht benutzt, als unwichtig abzustempeln (ich erinner mich da an die threads mit zeigern, virtuellen funktionen etc...) 😉

    Tu ich doch gar nicht (vorausgesetzt ich verstehe dich richtig).
    Aber wenn mir jemand schreibt "Neku: deine main() funktion hat einen verkrueppelten kopf.", dann kann ich doch wohl nachfragen, ob ich einen Fehler gemacht habe. 😉



  • dann musst du es aber schon richtig machen!

    Ansonsten hast ja recht...


Anmelden zum Antworten