char slowo[5]="home" // string slowo="home"

char slowo[5]="home" // string slowo="home"
BF
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:48
0

dlaczego w tym przykładzie przy porównywaniu typów char np;

Kopiuj
char slowo[5]="home";
strcmp(slowo,"walek");

Musimy używać funkcji strcmp() ? - bo nazwa tablicy znaków char, wskaźnik typu char oraz literał łańcuchowy ujęty w nawiasy są traktowane jako adresy pierwszego znaku łańcucha. Pytanie dlaczego przy klasie string można używac takiego porównania:

Kopiuj
string slowo="home";
slowo!="walek";

? dlaczego klasa string pozwala na takie porównanie ? czy przy stringu znaki ujęte w cudzysłowy nie są widziane jako adresy ?

edytowany 1x, ostatnio: burger_food
MA
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 10 lat
0

Yyyyyyy..... Z prostego powodu, który napisałeś? Bo tablice to... tablice. A stringi to obiekty klas z przeladowanym operatorem porownania ? O.o


Zero litości dla nieróbstwa.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
0
Kopiuj
string slowo="home";

to powoduje wywołanie konstruktora

Kopiuj
string::string(const char*)

a to

Kopiuj
slowo!="walek";

operatora

Kopiuj
bool operator !=(const string&, const char*)
edytowany 2x, ostatnio: Azarien

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.