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

Dynamiczne alokowanie pamięci

Object Storage Arubacloud
0 głosów
155 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez qwerty Początkujący (380 p.)

Witam, od niedawna ucze się programowania c++ z pomocą filmów pana Zelenta. Wszystko szło gładko do odcinka 10 o wzkaznikach. I tutaj jest moja prośba. Czy mógłby mi ktoś "łopatologicznie" wyjaśnić ten przykład? Z góry bardzo dziękuje!

#include <iostream>
using namespace std;
int main()
{
    int ile;
    cout<<"Ile liczb w tablicy?";
    cin>>ile;
    int *tablica;
    tablica = new int[ile];
    for(int i=0; i<ile; i++)
    {
        cout<<(int)tablica<<endl;
        tablica++;
    }
    delete [] tablica;
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 30 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
wybrane 30 listopada 2016 przez qwerty
 
Najlepsza
#include <iostream>                  // ładujesz bibliotekę iostream
using namespace std;               // włączasz używanie przestrzeni nazw std
int main()                                   // tworzysz główną funkcję main
{
    int ile;                                     // deklarujesz zmienną typu integer o nazwie ile
    cout<<"Ile liczb w tablicy?";   // wyświetlasz w konsoli komunikat przy użyciu standardowego wyjścia cout
    cin>>ile;                                 // pobierasz liczbę ze standardowego wejścia (z konsoli) i zapisujesz ją pod zmienną ile
    int *tablica;                             // deklarujesz wskaźnik tablica na zmienne typu int 
    tablica = new int[ile];              // alokujesz pamięć przy użyciu operatora "new" dla "ile" elementów 
    for(int i=0; i<ile; i++)               // tworzysz pętlę for o zmiennej i wartościowanej od 0 do ile - 1 o kroku równym jeden
    {
        cout<<(int)tablica<<endl;   // w każdym kroku pętli wypisujesz na ekran adres na który wskazuje tablica po przerzutowaniu go na zmienną typu integer
        tablica++;                           // w każdym kroku przesuwasz wskaźnik o jedno miejsce
    }
    delete [] tablica;                     // kasujesz tablicę pod wskaźnikiem tablica, i tutaj obawiam się, że masz błąd ponieważ wskaźnik powinien wskazywać na pierwszy element tablicy
    return 0;                                 // funkcja main zwraca zero po wykonaniu
}

Obawiam się, że wskaźnik tablicy przed skasowaniem powinieneś przesunąć na pierwszą pozycję:

tablica = tablica - ile;

 

komentarz 30 listopada 2016 przez qwerty Początkujący (380 p.)
Bardzo dziękuje za wytłumaczenie mi tego! Nic mi nie wiadomo czy wzkaznik tablicy trzeba przesunąć na pierwszą pozycję, przepisywałem kod z odcinka pana Zelenta.
komentarz 30 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
do poruszania się po tablicy tak jak to zrobiłeś dobrze jest używać drugiego wskaźnika.
0 głosów
odpowiedź 30 listopada 2016 przez Knayder Nałogowiec (37,640 p.)

Po pierwsze. Nie powinno się przesuwać wewnętrznego wskaźnika tablicy. Lepiej utworzyć inny i wskazać go na pierwszy jej element i to go przesuwać.
Po drugie. próbujesz przeprowadzić konwersję ze wskaźnika na int. Samo tablica to wskaźnik.
Musisz to zapisać tak.
 

#include <iostream>
using namespace std;
int main()
{
    int ile;
    cout<<"Ile liczb w tablicy?";
    cin>>ile;
    int *tablica;
    tablica = new int[ile];
    for(int i=0; i<ile; i++)
        cout<<tablica[i]<<endl;
    delete [] tablica;
    return 0;
}

Ewentualnie utworzyć wskaźnik i wskazać go na pierwszy element a potem go przesuwać, czyli tak jak napisałem wyżej.

komentarz 30 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Aha no i rozumiesz że dane zawarte w tej tablicy to są jakieś śmieci, bo nic tam nie wpisałeś?

Podobne pytania

0 głosów
3 odpowiedzi 192 wizyt
pytanie zadane 13 października 2016 w C i C++ przez neWWbie Początkujący (410 p.)
+1 głos
2 odpowiedzi 272 wizyt
pytanie zadane 5 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,610 p.)
0 głosów
0 odpowiedzi 138 wizyt
pytanie zadane 18 września 2020 w C i C++ przez RobcioXXL Użytkownik (710 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...