Pointer, bitte mal drüberschauen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Pointer, bitte mal drüberschauen

Beitrag von DANrulz81 » Di Jan 03, 2012 9:39 am

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.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Pointer, bitte mal drüberschauen

Beitrag von cloidnerux » Di Jan 03, 2012 11:33 am

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer, bitte mal drüberschauen

Beitrag von DANrulz81 » Di Jan 03, 2012 12:23 pm

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;
}

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Pointer, bitte mal drüberschauen

Beitrag von cloidnerux » Di Jan 03, 2012 12:36 pm

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;
}
Redundanz macht wiederholen unnötig.
quod erat expectandum

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer, bitte mal drüberschauen

Beitrag von DANrulz81 » Di Jan 03, 2012 2:03 pm

ACH SOOOOO, Ich bin ein Hirni. :oops: Danke dir.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Pointer, bitte mal drüberschauen

Beitrag von cloidnerux » Di Jan 03, 2012 9:25 pm

ACH SOOOOO, Ich bin ein Hirni. Danke dir
Kein Problem, dafür ist das Forum da!
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten