Zadanie z 10-elementową tablicą i wskaźnikiem

0

Napisz funkcję, która zarezerwuje 10 elementową tablicę,a jej adres przekaże wskaźnikiowi o nazwie linijka. Ma to być tablica, w której można przechowywać wskaźniki do tablic znaków.
W internecie znalazłem takie coś:

char ** zarezerwoj(int rozmiar);
int main()
{
        int rozmiar = 10;
        char * *linijka = zarezerwoj(rozmiar);  //skoro ma pokazywać na tablicę wskaźników, sama musi być wskaźnikiem do wskaźników
}
char ** zarezerwoj(int rozmiar) // ** bo to funkcja zwraca wskaźnik, mogący pokazywać na wskaźniki, bo wskaźnikami właśnie są elementy utworzonej tablicy
{
        char ** wsk;
        wsk = new char * [rozmiar];             // Nie rozumiem, po co od razu do tego funkcje pisać. Operator new uważam, za bardzo wyraźny i wygodny
        return wsk;
} 
0

Jedna * to wskaźnik na char lub tablica znaków.
Potrzebujesz tablice tablic.

1

Kto -uje kreskuje...

nie rozumiem tej linijki char * *linijka, po co dwie * ? jedna nie starczy, będzie to wskaźnik do tablicy wskaźników.

char* to wskaźnik na tablicę znaków, ma ich być dziesięć. Dla ułatwienia zapisz sobie to tak:

typedef char* c_string;
c_string* arr = zarezerwuj();

Jeśli nie jest to zadanie w szkole, a w jakimś kursie to zmień kurs, używanie nagiego new i delete (i ogółem ręczne zarządzanie pamięcią) to antyidiom w C++, pomijając specyficzne przypadki.

0

char* wsk jest wkaźnikiem do tablicy znaków, czyli wsk[0], wsk[1] to są znaki.
char** wsk jest wskaźnikiem do tablicy wskaźników (do tablicy znaków), czyli wsk[0], wsk[1] to są wskaźniki jak wyżej.

zarezerwuj - no w takiej postaci nie ma większego sensu, ale może mieć sens, jak każdemu z tych wskaźników w utworzonej tablicy chcesz nadać jakąś wartość.
I nie, new nie jest wygodny, w normalnym kodzie nie powinieneś go używać.

1

Tablica wskaźników na tablicę znaków w C++ to jest dla mnie coś w tym stylu:

array<array<char, 125>*, 50> tab; // Minimum C++11 wymagany

albo jeśli rozmiary nie są znane w trakcie kompilacji to:

vector<vector<char>*> tab;

W normalnym kodzie w C++ jeśli nie trzeba/nie umiesz to lepiej nie używać new/delete.

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