Wskaźniki Dynamiczna Alokacja Tablic

Odpowiedz Nowy wątek
2019-03-12 16:26
0
int main()
{
    int rozmiar = 0;
    char * Tab = nullptr;
    cout << "Wpisz liczbê w zapisie rzymskim.\nWprowadz 0 aby zakonczyc wczytywanie\n";
    while( Czytaj( Tab, rozmiar ) );

}
//============================================
bool Czytaj( char * Tab, int & rozmiar )
{
    char bufor;
    cin >> bufor;
    if( bufor == '0' )
         return false;

    char * NTab = new char[ rozmiar + 1 ];
    for( int i = 0; i < rozmiar; ++i )
    {
        NTab[ i ] = Tab[ i ];
    }
    NTab[ rozmiar ] = bufor;
    delete[] Tab;
    Tab = NTab;
    rozmiar++;
    return true;
}

Mam taki programik który ma wczytywać dane do tablicy i ją alokować. Ciągle brak odpowiedzi. Czuję, że mogłem źle przesłać z main do funkcji. Pomożecie?

edytowany 1x, ostatnio: Ludwiniak Wiktor, 2019-03-12 16:41

Pozostało 580 znaków

2019-03-12 16:40
1

Jeśli przesyłasz wskaźnik jako argument funkcji i chcesz go modyfikować(nie obiekt na który wskazuje, tylko wskaźnik) to musisz go przesłać przez... wskaźnik lub referencje :P
bool Czytaj(char** Tab, int& rozmiar) lub bool Czytaj( char*& Tab, int& rozmiar).
Wtedy modyfikacje wskaźnika będą widoczne również poza samą funkcją.

Masz jakieś wytyczne, że funkcja wczytująca musi być taka dzika?

Pozostało 580 znaków

2019-03-12 16:53
0

Masz jakieś wytyczne, że funkcja wczytująca musi być taka dzika?

Moimi wytycznymi jest prościutkie zadanie dodatkowe polegające na zrobieniu programu przeliczający z notacji rzymskiej na system decymalny. Uznałem, że w gruncie rzeczy prościutkie zadanie parę if-ów tablica na chociażby na 100 elementów i gotowe. Klasa nawet tablic nie przerabiała nie mówiąc już o tablicach. Ja uznałem, że jak już uczę się na własną rękę to zrobię takie wczytywanie (pytanie o ilość znaków byłoby za proste lub alokacja w funkcji main bez przesyłania wskaźników których się teraz zacząłem uczyć) Więc po prostu utrudniłem sobie zadanie w celu nauki korzystania z wskaźników. Lecę poprawić te błędy :D

Edit
Działa :-D. Ale w sumie nie rozumiem dlaczego... Mógłbym prosić o wskazówkę bądź dwie? Dlaczego (wedle mojego rozumienia wskaźników) skoro przyjmowałem adres wskaźnika Tab to nie zmieniał się?

edytowany 3x, ostatnio: Ludwiniak Wiktor, 2019-03-12 16:58
Przyjmowałeś wskaźnik Tab a nie adres wskaźnika Tab :) - Delor 2019-03-12 20:18

Pozostało 580 znaków

2019-03-12 17:29
2

To działa identycznie jak w przypadku normalnych zmiennych
Mocno upraszczając:

void fun(int* ptr)
{
  ptr = new int;
}

to tak naprawdę:

void fun(int* ptr)
{
  int* copy = ptr;
  copy = new int;
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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