[C++] Dynamiczne przydzielanie pamięci podstawy
Ostatnio zmodyfikowano 2014-01-10 18:42
natoll112 Temat założony przez niniejszego użytkownika |
[C++] Dynamiczne przydzielanie pamięci podstawy » 2014-01-10 17:18:04 Witam, jestem mega początkującym programistą, aktualnie staram się zgłębić wszelakie tajniki wskaźników, mam jednak kilka pytań dotyczących dynamicznego przydzielania pamięci. załóżmy że chcę stworzyć dynamiczną tablicę: int n; char * wsk; wsk = new char[ n ];
n = 10; wsk = "teeeeeekst";
cout << "tablica przechowuje napis: " << wsk << endl;
to się kompiluje i działa tak jak bym tego chciał. Jednak przypisując wartość do wskaźnika powinno się używać przed nim operatora (*), prawda? Nie rozumiem czemu w tej sytuacji: float * wsk; wsk = new float; * wsk = 10.5;
cout << "tablica przechowuje liczbe:" << * wsk << endl;
muszę już uzyć operatora gwiazdki? (*wsk = 10.5, rozumiem ze gdyby tej gwiazdki tam nie było to podawalibyśmy numer komórki pamięci na którą chcemy wstawić wskaźnik, dlaczego jednak w poprzednim przykładzie gdy przypisywaliśmy tekst do wskaznika (wsk = "teeeeeekst") tej gwiazdki tam nie ma?) To samo tyczy się wyjścia cout, czemu w pierwszym programie nie musiałem pisać gwiazdki a w drugim już tak, żeby kompilator mi to łyknął? |
|
Monika90 |
» 2014-01-10 18:42:38 wsk = "tekst"; To nie kopiuje tekstu do tablicy do której odnosi się wskaźnik wskTo przypisuje wskaźnikowi adres pierwszego elementu tablicy, w której kompilator umieścił literał napisowy. Ten kod można przetłumaczyć na następujacy: const char globalna_tablica_znana_tylko_kompilatorowi[ 6 ] = { 't', 'e', 'k', 's', 't', '\0' }; wsk = & globalna_tablica_znana_tylko_kompilatorowi[ 0 ];
To samo tyczy się wyjścia cout, czemu w pierwszym programie nie musiałem pisać gwiazdki a w drugim już tak, żeby kompilator mi to łyknął? |
Dlatego, że operator << jest przeciążony dla wskaźników char * , a nie jest przeciążony dla wskaźników float * . Te pierwsze traktowane są jako wskaźniki do pierwszego elementu tablicy znaków zakonczonych zerem - czyli drukowany jest napis zawarty w tablicy. |
|
« 1 » |