ďťż

Ładny brzuch

Witam!
W poniższym programie:
#include <cstdlib> #include <iostream> using namespace std; char *Lancuch(char *lancuch1, char *lancuch2) {     if(strlen(lancuch1) == strlen(lancuch2))     {        cout << "Sa rowne!!! - ";        return lancuch1;     }         else if(strlen(lancuch1) > strlen(lancuch2))     {          return lancuch1;     }         else if(strlen(lancuch1) < strlen(lancuch2))     {          return lancuch2;     }     else     {         cout << "Blad!...\n";     } } int main(int argc, char *argv[]) {    char *znaki1 = "ABC";    char *znaki2 = "ABC";    cout << "1 lancuch: " << znaki1;    cout << "\n" << "2 lancuch: " << znaki2;    cout << "\nDluzszy jest lancuch: ";    cout << Lancuch(znaki1, znaki2);            cout << "\n";    system("PAUSE");    return EXIT_SUCCESS; }
Nie rozumiem jaki powinien być prototyp dla funkcji:
char *Lancuch(char *lancuch1, char *lancuch2)
aby nie można było zmienić danych w zmiennych przekazywanym przez wskaźnik, czyli lancuch1 i lancuch2
Próbowałem dwóch wersji:
char *Lancuch(char *const lancuch1, char  *const lancuch2)
oraz
char *Lancuch(const char *lancuch1, const char *lancuch2)
Dopóki nie sprawdziłem odpowiedzi kompilatora na ten problem, myślałem, że tą właściwą wersją będzie:
char *Lancuch(const char *lancuch1, const char *lancuch2)
(ponieważ jak wyczytałem z pewnej książki jeśli const stoi przed typem stała jest wartość, a jeśli przed nazwą zmiennej - wtedy stały jest wskaźnik.)
Jednak kompilator nie pozwala na zamianę wartości zmiennych lancuch1 i lancuch2 tylko jeśli prototyp wygląda tak:
char *Lancuch(char *const lancuch1, char  *const lancuch2)
dlaczego???
Proszę o pomoc :rolleyes:
Użytkownik comp123 edytował ten post 18 lipiec 2005, 14:26


Jeśli chcesz zamienić DANE pod wskaźnikiem, to nie możesz robić tego na zasadzie wskaznik_1 = wskaznik_2, bo nie zmieniasz wtedy danych, a sam wskaźnik. W wypadku tekstu używasz strcpy, a w wypadku innych rzeczy możesz np. zrobić tak: *wskaznik_1 = *wskaznik_2; wtedy jeśli wskaznik_1 jest T * const wskaznik_1 to wskaznik_1 = wskaznik_2 nie będzie działać, ale dalej wartość POD wskaźnikiem można zmienić.

constT* żeby nie zmienić wartości
T*const żeby nie zmienić miejsca wskazywanego przez wskaźnik
constT* const żeby nie zmienić ani wartości, ani wskazywanego obiektu.

TAPL trwa...

I m. in. koniecznosc kopiowania przez strcpy pointerow na char'y powoduje, ze duzo wygodniej (a takze bezpieczniej) jest uzywac std::string :) Z tego co pamietam to jest tam operator przypisania kopiujacy ciag znakow na inne miejsce

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •