Von einer Funktion ein Feld zurückgeben

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Source Code

    1. int dezimaltobinaer(int zahl){
    2. int rest[10];
    3. int i;
    4. int y=0;
    5. for (i=0;i<10;i++){
    6. rest[i]= zahl%2;
    7. zahl= zahl/2;
    8. }
    9. printf("Ausgabe\n\n");
    10. while (i>0){
    11. i--;
    12. printf ("%d", rest[i]);
    13. }
    14. return (0);
    15. }
    Display All


    Ich möchte den Inhalt des Feldes rest nicht in der Funktion ausgeben. Sondern im Main Programm aber wie bekomme ich jetzt das Feld in die Main Funktion
  • Source Code

    1. int[] dezimaltobinaer(int zahl){
    2. int rest[10];
    3. int i;
    4. int y=0;
    5. for (i=0;i<10;i++){
    6. rest[i]= zahl%2;
    7. zahl= zahl/2;
    8. }
    9. return(rest);
    10. }
    Display All

    oder

    Source Code

    1. int* dezimaltobinaer(int zahl){
    2. int rest[10];
    3. int i;
    4. int y=0;
    5. for (i=0;i<10;i++){
    6. rest[i]= zahl%2;
    7. zahl= zahl/2;
    8. }
    9. return(rest);
    10. }
    Display All


    EDIT://
    Wenn man das Feld zurückgibt muss man es IMHO im Heap erstellen:

    Source Code

    1. int[] dezimaltobinaer(int zahl){
    2. int * rest = new int[10];
    3. int i;
    4. int y=0;
    5. for (i=0;i<10;i++){
    6. rest[i]= zahl%2;
    7. zahl= zahl/2;
    8. }
    9. return(rest);
    10. }
    Display All

    oder

    Source Code

    1. int* dezimaltobinaer(int zahl){
    2. int * rest = new int[10];
    3. int i;
    4. int y=0;
    5. for (i=0;i<10;i++){
    6. rest[i]= zahl%2;
    7. zahl= zahl/2;
    8. }
    9. return(rest);
    10. }
    Display All

    oder irre ich mich da
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)
  • sry, mein fehler:
    ich denke am sinnvollsten ist die Übergabe als Referenz.

    Source Code

    1. #include <stdio.h>
    2. int dezimaltobinaer(int zahl, int rest[]) {
    3. int i;
    4. for (i=0;i<10;i++){
    5. rest[i]= zahl%2;
    6. zahl= zahl/2;
    7. }
    8. return i;
    9. }
    10. int main(void) {
    11. int rest[10];
    12. int i=dezimaltobinaer(5, rest);
    13. printf("Ausgabe: ");
    14. while (i>0){
    15. i--;
    16. printf ("%d", rest[i]);
    17. }
    18. printf("\n");
    19. return 0;
    20. }
    Display All
  • wo ihr schon dabei seid, hab ich auch noch ne frage (net so wichtig)

    was muss ich machen, wenn ich ein array an ne funktion übergeben will, und das direkt in der funktion ändern will? (zeiger und referenzen)

    Source Code

    1. void func(int *map[]);


    <- so hab ich das gemacht (bestimmt schwachsinn ^^")
    kann mir jmd nen beispielcode geben, wie ich das jetzt machen muss?
    ich kriegs einfach net gebacken ~.~

    ->

    Source Code

    1. func(&map);
    2. func(&map[]);


    <- geht beides iwie net bei mir...

    danke für antwort

    -pocky-
  • danke für den code funzt auch super!
    aber hab mal ne frage zur der funktion, also wie des funktionert.
    weil ich versteh nich wie das main programm an die wert von rest kommt!
    weil die funktion gibt ja nur i zurück.
    wär cool wenn man mir dies erklären könnte.
    thx mtx89
  • "pocky" wrote:

    was muss ich machen, wenn ich ein array an ne funktion übergeben will, und das direkt in der funktion ändern will?


    Wenn ich das richtig deute, ist es doch genau das, was in meinem Code passiert.
    Deinem Code nach zu urteilen handelt es sich aber um ein Array von Zeigern - also quasi 2 Dimensional. Oder war das nur ein Versuch?

    Jedenfalls scheint ihr genau das selbe zu wollen.
    Der Code funktioniert, weil das Array nicht als ganzes (Call by Value) sondern nur als Referenz (Call by Reference) übergeben wird. Das Array existiert also nur einmal im Arbeitspeicher. Das einzige was ihr übergebt ist der Zeiger, der auf das Array zeigt.

    Wenn ihr normale ints übergebt dann wird dieses Call by Value übergeben und es wird innerhalb der Funktion eine lokale Kopie erzeugt. Es existiert also 2x im Speicher.