Chowan Temat założony przez niniejszego użytkownika |
wskażniki tablice char » 2017-04-25 20:18:29 mam kilka pytań odnośnie wskaźników, gdyż przerabiam książkę prata i nie jest pewien czy dobrze to rozumiem. #include <iostream> int main() { using namespace std; char * tab = "ala"; char x[ 20 ] = "agnieszka"; char * y[ 3 ] = { "mama", "tata", "ola" }; cout << y[ 1 ][ 1 ] << endl << x << endl << *( y + 1 ) << endl << tab[ 1 ]; }
1. Czy to co w komentarzach napisałem jest prawdą? 2. Czy char *y[3] to wskaźnik na tablice dwuwymiarowa z 3 wierszami? co równoważne by było char y[3][jakiś rozmiar który pomieści łańcuch char] 3. jak zaalokuje pamięć char *p= new char[n] to będzie to pamięć na tablice dwuwymiarowa z n wierszami? natomiast int *p= new int [n] to tablica jednowymiarowa n elementowa? |
|
pekfos |
» 2017-04-25 20:50:59 To nie to samo. char * y[ 3 ] = { "mama", "tata", "ola" };
|
Tablica wskaźników, nie wskaźnik na tablicę. 2. Czy char *y[3] to wskaźnik na tablice dwuwymiarowa z 3 wierszami? co równoważne by było char y[3][jakiś rozmiar który pomieści łańcuch char] |
Nie jest równoważne. jak zaalokuje pamięć char *p= new char[n] to będzie to pamięć na tablice dwuwymiarowa z n wierszami? natomiast int *p= new int [n] to tablica jednowymiarowa n elementowa? |
Bzdura. I ta tablica dwuwymiarowa miała by wiersze długości "char", cokolwiek to znaczy? Bo tylko tym się różni od alokacji tablicy jednowymiarowej intów. |
|
Chowan Temat założony przez niniejszego użytkownika |
» 2017-04-26 08:14:04 Czwarty cytat wydawał mi się logiczny ze względu na 3 cytat. Ale protestował em w nocy t, mogłem przed zadaniem pytania. A co do 1 i 3 cytatu dlaczego nie? |
|
pekfos |
» 2017-04-26 11:36:35 1. Tablica to nie to samo co wskaźnik. 2. Czy char *y[3] to wskaźnik na tablice dwuwymiarowa z 3 wierszami? |
To 3 wskaźniki na tablice jednowymiarowe, a nie jeden wskaźnik na tablicę dwuwymiarową. Funkcjonuje jak tablica dwuwymiarowa. co równoważne by było char y[3][jakiś rozmiar który pomieści łańcuch char] |
Musisz podać "jakiś rozmiar który pomieści łańcuch char", a w tej niby równoważnej konstrukcji już nie. Kompilator sobie zgadnie, ile pamięci ma zarezerwować..? |
|
Chowan Temat założony przez niniejszego użytkownika |
» 2017-04-26 12:27:18 ok. dzięki wielkie za rozjaśnienie tematu. Pościągałem sobie wykłady z uczelni informatycznych to doczytam sobie, bo chce dobrze to zakumać, żeby nie wracać ciągle do tego tematu. ( mam książkę prata, oglądałem filmik zelenta i z tego forum patrzyłem artykuły ale to ciężki temat jest jakiś). |
|
Monika90 |
» 2017-04-28 16:34:59 char * tab = "ala"; char * y[ 3 ] = { "mama", "tata", "ola" };
To jest niepoprawne, ponieważ typem literałów "..." jest const char[n], więc wskaźniki też powinny mieć const. Jedyny powód dla którego taki kod się da skompilować, to kompatybilność wsteczna kompilatora. Można skonfigurować kompilator tak aby wykrywał takie błędy, albo użyć nowszego. Poprawny kod powinien wyglądać tak: const char * tab = "ala"; const char * y[ 3 ] = { "mama", "tata", "ola" };
|
|
Chowan Temat założony przez niniejszego użytkownika |
» 2017-04-28 18:01:46 Okej, dzięki będę pamiętał o tym. |
|
« 1 » |