#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;
}
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.
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/