Tablica wskaznikow

0
#include <iostream>

using namespace std;

int main()
{
    char *stacja[]={"miasto","miasto2","miasto3","miasto4","miasto5","miasto6","miasto7"};
    char *www[3];   // Czy taki zapis nie jest niebezpieczny ?
    int i;
    for (i=0;i<7;i++)
    {
        cout << "stacja: " << stacja[i]<<endl;             // czemu pokazuje normalnie nazwe zamiast adresu danego wskaznika ? przeciez zeby pokazac to co kryje sie pod danym adresem wskaznika trzeba bylo uzyc  np *stacja[i]
    }
    www[0]=stacja[2]; 
    www[1]=stacja[5];
    www[2]="taki tekst";

    cout << "oto 3 elementy tablicy : \n" << www[0]<<", " << www[1] << ", " << www[2]<<endl<<www[3]<<endl; 
// chodzi o www[3]  pokazalo mi element zerowy stacja[0] przypadek ? a moze  dlatego ze uzylem tego zapisu  char *www[3];   ??


    return 0;
}
 
3

Przede wszystkim ta tablica powinna być tablicą wskaźników do stałych: const char *stacja[]. W C++ nie można przypisać literału będącego łańcuchem znaków do typu char *, musi być const char *.

char *www[3]; może być potencjalnie niebezpieczny - wartości w tablicy mają nieokreślone wartości. Nie można ich używać, gdybyś to zrobił byłby to undefined behavior.

stacja[i] jest obecnie typu char * - to jest typ elemntu tablicy. std::cout (obiekt klasy std::basic_ostream) ma dla typu const char * przciążony operator <<, który wypisuje c-string. Żeby pokazać jaki jest adres, na który pokazuje wskaźnik char * z Twojej tablicy, zrób static_cast<const void *>(stacja[i]) - zostanie wykorzystane przeciążenie operatora <<, służące do wypisywania wartości wskaźników.

www[3] to undefined behavior i nie można powiedzieć, co się stanie. To co obserwujesz jest z punktu widzenia standardu języka przypadkowe. Tablica ma 3 elementy a odwołujesz się do elementu 4, którego nie ma.

0

zamiast kopac sie z tablicami wskaznikow nie lepiej byloby uzyc np vector<string> ?
przyklad znajdziesz m. in. tu http://www.cplusplus.com/reference/vector/vector/vector/

1 użytkowników online, w tym zalogowanych: 0, gości: 1