• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak swobodnie poruszać się po tablicy przy dynamicznym alokowaniu pamięci?

Object Storage Arubacloud
+1 głos
892 wizyt
pytanie zadane 8 lipca 2015 w C i C++ przez k222 Nałogowiec (30,150 p.)
Pytanie może z tych banalnych, ale trochę nie ogarniam tematu dynamicznego alokowania pamięci, bo wiem jak to coś stworzyć i usunąć, jak po kolei wposać coś do komórek tabeli ale nie wiem jak się tym poruszać. Weźmy na przykład program liczący sumę x elementów. Można stworzyć tablicę z tymi x elementami:

int * tablica;
        tablica = new int [x];

można to usunąć:

delete [] tablica;

można tam coś powpisywać:

 for(int k=1; k <= x; k++)
        {
            cin>>*tablica;
            tablica++;
        };

(wypisałem to żebyście mnie poprawili jak juz tu mam gdzieś gafe, choć u mnie działało przy wpisywaniu liczb  a potem ich wypisywaniu)

ale np. jak wiemy że w tabeli na pewno będzie przynajmniej 1 liczby to jak dostać się po wykonaniu wcześniejszych operacji do trzeciej?

poza tym po pętli for wskaźnik będzie poza tablicą i czy jest jakiś szybszy sposób niż używanie tablica - - żeby dostać się na początek tablicy?

oraz jak przy tablicy stworzonej przy pomocy new i delete wykonać takie dodawanie (pokaże to tablicą zawierającą x elementów):

 for(int i=1; i < x; i++)
        {
        tablica[i] = tablica[i] + tablica[i - 1]
        };

1 odpowiedź

+2 głosów
odpowiedź 8 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
wybrane 8 lipca 2015 przez k222
 
Najlepsza
Dynamiczne tablice używasz tak samo jak zwykle statyczne tablice (np.tab[4] )... Tylko ze w ostatnim kodzie zepsułes i dałeś ; po nawiasie{}..
komentarz 8 lipca 2015 przez k222 Nałogowiec (30,150 p.)

To ; było dla tego że ten kod był trochę wyciągnięty z programu, 

A co do tych dynamicznych tablic to żeby używać tych tablic jak normalne oprócz nazwy wskaźnika powinna być nazwa tablicy a tam jest tylko new int [x] a więc nie mogę napisać czegoś typu nazwa_tablicy[miejsce o które mi chodzi] bo nie mam tej nazwy.

komentarz 8 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
A wskaźnik to co? Na co wskazuje? Na tablicę. Int * wskaznik = new int[5]; wskaznik[3]; I możesz robić co chcesz. Np. wskaznik[2] = 5;
komentarz 8 lipca 2015 przez k222 Nałogowiec (30,150 p.)
Według tej metody ten program powinien działać:

#include <iostream>

using namespace std;

int main()
{
    int x , y, j, z;
    cout<<"Ilo elementowa tablica: "<<endl;
    cin>>x;

    int * tablica;                        //tworzenie dynamicznekj tablicy,
    tablica = new int [x];
    
    cout<<"Wpisz "<<x<<" elementow do tablicy"<<endl;
    for(int k=1; k <= x; k++)
    {
        cin>>*tablica;                   //wpisywanie wartości do tablicy,
        tablica++;
    };
    cout<<"Ile wyszukan:"<<endl;
    cin>>z;
    for(int j=1; j<=z; j++)
    {
        cout<<"Ktory element wyszukac:  ";
        cin>>y;

        cout<<endl<<tablica[y]<<endl;  //próba odczytania z tablicy elementu numer y,
    };

    delete [] tablica;
    return 0;
}

a pokazuje jakieś dziwne liczby jak próbuje odczyyać n-ty element. Czy mógłbyś poprawić to tak żeby wskazywało prawidłowo? (może na przykładzie będzie lepiej) i sory że cię tak męczę ale chce żeby to w końcu zadziałało :)
komentarz 8 lipca 2015 przez Dorion300 Szeryf (90,250 p.)

Nie dziala ponieważ wskażnik nie wraca do pierwotnej formy po operacjach "tablica++"

oraz indeksowanie zaczyna się od zera

Kod teraz działa prawidłowo.

#include <iostream>

using namespace std;

int main()
{
    int x,z,y;
    cout<<"Ilo elementowa tablica: "<<endl;
    cin>>x;

    int * tablica;                        //tworzenie dynamicznekj tablicy,
    tablica = new int [x];

    cout<<"Wpisz "<<x<<" elementow do tablicy"<<endl;
    for(int i=0; i < x; i++)
    {
        cin>>tablica[i];                   //wpisywanie wartości do tablicy,
    };
    cout<<"Ile wyszukan:"<<endl;
    cin>>z;
    for(int i=0; i<z; i++)
    {
        cout<<"Ktory element wyszukac (od 0 do "<< x-1 << "):  " << endl;
        cin>>y;

        cout<< endl <<tablica[y]<<endl;  //próba odczytania z tablicy elementu numer y,
    };

    delete [] tablica;
    return 0;
}

 

komentarz 8 lipca 2015 przez k222 Nałogowiec (30,150 p.)
Wieeelkie dzięki

Podobne pytania

0 głosów
1 odpowiedź 160 wizyt
+1 głos
2 odpowiedzi 1,013 wizyt
+1 głos
2 odpowiedzi 723 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...