Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wskażniki tablice char

Ostatnio zmodyfikowano 2017-04-28 18:01
Autor Wiadomość
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.

C/C++
#include <iostream>
int main()
{
    using namespace std;
    char * tab = "ala"; // to samo co tab[3]="ala" lub {'a','l','a'}
    char x[ 20 ] = "agnieszka"; // inaczej {'a','g','n','i','e','s','z','k','a'}
    char * y[ 3 ] = { "mama", "tata", "ola" }; // wskażnik na tablice z 3 wierszami?
    cout << y[ 1 ][ 1 ] << endl << x << endl << *( y + 1 ) << endl << tab[ 1 ]; // chciałem posprawdzać jak to działa
}

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?
P-160493
pekfos
» 2017-04-25 20:50:59
C/C++
char * tab = "ala"; // to samo co tab[3]="ala" lub {'a','l','a'}
To nie to samo.

C/C++
char * y[ 3 ] = { "mama", "tata", "ola" }; // wskażnik na tablice z 3 wierszami?
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.
P-160495
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?
P-160504
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ć..?
P-160517
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ś).
P-160520
Monika90
» 2017-04-28 16:34:59
C/C++
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:
C/C++
const char * tab = "ala";
const char * y[ 3 ] = { "mama", "tata", "ola" };
P-160574
Chowan
Temat założony przez niniejszego użytkownika
» 2017-04-28 18:01:46
Okej, dzięki będę pamiętał o tym.
P-160580
« 1 »
  Strona 1 z 1