czy wie ktoś dlaczego przed nazwą funkcji stoi znak " * "

0

Witam,
piszę coś teraz na zaliczenie ale przy okazji trafiłem na zagadkę, dlaczego przed nazwą funkcji stoi *,
domyślam się ze ten znak mógłby być przy typie wyjściowym funkcji ale prosił bym aby ktoś mi to uzasadnił ;)

 
char *getDay(int dd,int mm,int yy){
    int day;
    if(!(mm>=1 && mm<=12)){
        return("Nie ma takiego miesiaca");
    }
    if(!(dd>=1 && dd<=getNumberOfDays(mm,yy))){
        return("Nieprawidlowa forma daty");
    }
    if(yy>=1600){
        day = getDayNumber(dd,mm,yy);
        day = day%7;
        return(getName(day));
    }else{
        return("Nieprawidlowy rok, prosze podac co najmiej 1600");
    }
}

pozdrawiam wszystkich cierpliwych,'
Anaxis

2

Ta * dotyczy typu zwracanego. Można powiedzieć, że stoi za char a nie przed funkcją :)

3
szweszwe napisał(a):

Ta * dotyczy typu zwracanego. Można powiedzieć, że stoi za char a nie przed funkcją :)

Nie jest to do końca prawda. Faktycznie taka jest "semantyka", tzn chodzi o to że funkcja zwraca wskaźnik na char, ale uważałbym z tym zakładaniem że * jest przyklejone do typu, bo potem są z tego powodu kłopoty. Przy zapisie:

int* a, b, c;

tylko 'a' jest wskaźnikiem, 'b' oraz 'c' to po prostu inty. Żeby było inaczej trzeba napisać:

int* a, *b, *c;
1

Bo gdyby nie było by tego wskaźnika to funkcja mogła by zwrócić tylko jeden znak, a tak może zwrócić cały napis.

1
char *getDay(int dd,int mm,int yy)

zapisz to sobie tak (to samo znaczenie)

char* getDay(int dd,int mm,int yy)

i już się staje jasne…

0

Tak btw jak jest najjaśniej? Przy funkcjach właśnie

char* getDay(int dd,int mm,int yy)

a przy typach char* getDay(int *dd,int *mm,int *yy)

 ?
1

Ja zawsze daję spację przed i po gwiazdce oznaczającej wskaźnik. Po gwiazdce powodującej dereferencję nie daję spacji.

0

@karolinaa ja zwykle zapisuje gwiazdkę przy typie, ale w związku z tym unikam tego co pokazałem wyżej, czyli deklaracji wielu zmiennych na raz.

0

dziękuję za zainteresowanie, mam nadzieje że nie było to "głupie pytanie",
pozdrawiam wszystkich, ale równocześnie prosił bym o wytłumaczenie zdania: "Po gwiazdce powodującej dereferencję nie daję spacji" - tak dla pokoleń ;)

0

Tzn na przykład piszę (spacje wokół gwiazdki oznaczającej wskaźnik):
int * wskaznik;
Ale tutaj już tak (brak spacji po gwiazdce oznaczającej dereferencję):
*wskaznik = *wskaznik + 5;

1 użytkowników online, w tym zalogowanych: 0, gości: 1