Funkcja zwracajaca wskaznik nie zwraca calego lancucha

0

Dlaczego ta funkcja zwraca jedynie jedna litere zamiast calego lancucha? Dzieje sie tylko wtedy gdy zwroce wskaznik;

char reverse(char napis[])
{
     char pierwszy = 0;
     char ostatni = strlen(napis)-1;
     char temp;
     while(ostatni>pierwszy)
     {
          temp = napis[pierwszy];
          napis[pierwszy++] = napis[ostatni];
          napis[ostatni--] = temp;
     }
     cout << napis;
     return *napis; // zwraca jedna litere
     return napis; // nie skompiluje, ale wtedy wyjdzie caly odwrocony napis. 
}
2

Wskaźnik wskazuje początek tablicy, pierwszy jej element. Tablice są zapisane w pamięci jednym ciągiem i zajmują kolejne komórki w pamięci. Z tego też powodu wystarczy znać pozycję pierwszego elementu, aby dostać się do całości.

1

char reverse(char napis[])
char to znak. Jeden. A nie wskaźnik.

0

Jeszcze jedno pytanie.
Załóżmy, że mam pierwszy i ostatni element tablicy.
Ustawiam jeden wskaznik na pierwszy i drugi na ostatni.
Aby uzyskac rozmiar tablicy zapiszę to tak?

int *p, *k;
int rozmiar = (k-p)/sizeof(int);
2

Nie, tak uzyskasz około 1/4 (konkretnie 1/sizeof(int)) rozmiaru tablicy. Po prostu k-p, wskaźniki znają swój typ.

1
RipvanWinkle napisał(a):

Jeszcze jedno pytanie.
Załóżmy, że mam pierwszy i ostatni element tablicy.
Ustawiam jeden wskaznik na pierwszy i drugi na ostatni.
Aby uzyskac rozmiar tablicy zapiszę to tak?

int *p, *k;
int rozmiar = (k-p)/sizeof(int);

Arytmetyka wskaźnikowa się kłania. W uproszczeniu, jak odejmujesz dwa wskaźniki tego samego typu, to wynikiem jest offset, uwzględniający rozmiar elementów, na które wskazują te wskaźniki, a nie liczba bajtów. Jakbyś rzutował te wskaźniki na wskaźniki na typ zajmujący jeden bajt (np. char), to owszem, wynikiem byłaby liczba bajtów i trzeb by to podzielić przez rozmiar typu.

0

Czy to nie jest tak, ze wskazniki to zlo?

0

Nie jest. Złem jest używanie zwykłych wskaźników "posiadających" wskazywane dane. W przypadku, gdy wyłącznie na nie pokazują jest ok.

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