Tablica wskaznikow

Tablica wskaznikow
balti
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 3 lata
  • Postów:156
0
Kopiuj
#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;
}
 
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
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.


"(...) otherwise, the behavior is undefined".
edytowany 2x, ostatnio: Endrju
kq
W C++ nie można przypisać łańcucha znakowego do typu char *, musi być const char *. Jak dla mnie brakuje tutaj "literału" przed "łańcucha znakowego".
satirev
No to liczymy...raz...dwa...z sygnaturą 3. Liczba słów w poście: 138 + podpis: 6. Nie jest najgorzej ale odnoszę wrażenie, że już bywało lepiej ; p
katelx
  • Rejestracja:około 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Hong Kong
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/

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.