Seite 1 von 1

Pointer, bitte mal drüberschauen

Verfasst: Di Jan 03, 2012 9:39 am
von DANrulz81
Hallo zusammen,

ich bin grad an Pointern dran. Dabei ist folgender Code entstanden:

Code: Alles auswählen

#include <stdio.h>

int doublepointer(int *pointer)
{
    *pointer += *pointer;
    /*printf("\nPointer verdoppeln\n");*/
    return *pointer;
}

int main(void)
{
    int c, x, i;
    int *pointer, *pointer2;

    printf("\nBitte eine Zahl eingeben: ");
    scanf("%i",&c);
    printf("\nWie oft?: ");
    scanf("%i",&x);
    printf("\n");

    pointer =&c;
    pointer2=&x;

    for(i=0;i<x;i++)
    {
        printf("\nDurchgang: %i",i+1);
        printf("\nDie Adresse der Zahl ist:           %p\nDie Zahl war:                       %i\n",pointer, *pointer);
        printf("Die Adresse der 'Wie oft'-Variable: %p\n",pointer2);
        doublepointer(pointer);
    }
    printf("\n\nDie Adresse der Speichervariablen wird nicht verändert!");
    return 0;
}
Vielleicht könntet ihr mir noch Tipps zur Verbesserung des Codes geben.

Re: Pointer, bitte mal drüberschauen

Verfasst: Di Jan 03, 2012 11:33 am
von cloidnerux
Statt

Code: Alles auswählen

*pointer += *pointer;

kann man

Code: Alles auswählen

*pointer *= 2;
Schreiben, das verhindert Fehler wenn du vergisst irgendwo ein "*" zu setzen, zudem erkennt man sofort die egt Operation die ausgeführt wird.

Zudem kannst du den Rückgabetyp der Funktion auf void setzen, da du ja den pointer veränderst und damit es sich erübrigt iwas zurückzugeben. Damit kannst du dir auch das

Code: Alles auswählen

return *pointer;
sparen.

Ansonsten ist der Rest des Codes so in Ordnung, nicht schön aber es reicht für den Anwendungszweck.

MfG cloidnerux.

Re: Pointer, bitte mal drüberschauen

Verfasst: Di Jan 03, 2012 12:23 pm
von DANrulz81
Hallo Cloidnerux,

danke für die Tipps, allerdings weiß ich nicht, wie ich die Funktion auf void setzen soll:

Code: Alles auswählen

int doublepointer(void)
{
    *pointer *= 2;
}
Da bekomm ich immer einen Compilerfehler. So funktioniert es:

Code: Alles auswählen

int doublepointer(int *pointer)
{
    *pointer *= 2;
    return 0;
}

Re: Pointer, bitte mal drüberschauen

Verfasst: Di Jan 03, 2012 12:36 pm
von cloidnerux
danke für die Tipps, allerdings weiß ich nicht, wie ich die Funktion auf void setzen soll:
Der Funktionskopf besteht aus 3 Teilen: Dem Rückgabetyp, dem Funktionsnamen und der Paramterliste:

Code: Alles auswählen

<typ> <name>(<parameter>)
z.B:

Code: Alles auswählen

int IrgendeinName(int patameter1, int parameter2)
Nun ist es so, dass wenn dein Rückgabetyp int ist(wie im Beispiel oben), musst du auf jeden fall in deiner Funktion ein

Code: Alles auswählen

return IrgendeinInt;
haben, da du ja ein INT zurückgeben MUSST.

Nun kannst du den Rückgabetyp auch auf void setzten:

Code: Alles auswählen

void IrgendeineFunktion(float parameter1)
Damit musst und kannst du nichts mehr zurückgeben, daher fällt ein return weg.
In deinem Fall:

Code: Alles auswählen

void doublepointer(int *pointer)
{
    *pointer *= 2;
}

Re: Pointer, bitte mal drüberschauen

Verfasst: Di Jan 03, 2012 2:03 pm
von DANrulz81
ACH SOOOOO, Ich bin ein Hirni. :oops: Danke dir.

Re: Pointer, bitte mal drüberschauen

Verfasst: Di Jan 03, 2012 9:25 pm
von cloidnerux
ACH SOOOOO, Ich bin ein Hirni. Danke dir
Kein Problem, dafür ist das Forum da!