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

deklarowanie tablicy

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
430 wizyt
pytanie zadane 25 stycznia 2021 w C i C++ przez KonradKalbarczyk Nowicjusz (240 p.)

Witam

Jestem osobą dopiero rozpoczynającą przygodę z C++. Na jednym z filmów Mirosława Zelnera natknąłem się na probem dynamicznej alokacji pamięci. fragment niezrozumiałego zamieszczam na poniższym zdjęciu:

Chodzi mi o linijkę 13. czy przypisując do zmiennej wskaźnikowej miejsce rozpoczęcia nowej tablicy, nie powinniśmy również podać nazwy tej tablicy? Rozumiem, że za pomocą operatora new rezerwujemy obszar pamięci na nową tablicę, symbolami "[]" informujemy, że rezerwujemy miejsce na tablicę a między tymi znakami wpisujemy liczbę zarezerwowanych "intów" Proszę o rozjaśnienie i wyjaśnienie, dlaczego nie nadajemy tej tablicy nazwy. Czy to oznacza, że będziemy mogli się do niej odwoływać tylko po zmiennej wskaźnikowej tablica?

komentarz 25 stycznia 2021 przez KonradKalbarczyk Nowicjusz (240 p.)

Chciałbym jeszcze zapytać, czym różni się taka dynamiczna alokacja pamięci od takiej zwykłej, tak jak w programie na poniższym zdjęciu:

1 odpowiedź

+1 głos
odpowiedź 25 stycznia 2021 przez adrian17 Mentor (350,120 p.)

czy przypisując do zmiennej wskaźnikowej miejsce rozpoczęcia nowej tablicy, nie powinniśmy również podać nazwy tej tablicy?

Um... nie ma czegoś takiego ogólnie w C++ie. Obiekty nie mają nazw. Masz zmienne zawierające obiekty lub wskazujące na obiekty w pamięci - ale to zmienne mają nazwy, nie obiekty.

Czy to oznacza, że będziemy mogli się do niej odwoływać tylko po zmiennej wskaźnikowej tablica?

Nie, jak najbardziej możesz mieć inne zmienne ze wskaźnikami lub referencjami na zaalokowaną wartość lub tablicę.

int *x = new int;
int *y = x;
int &z = *x;
// etc

Chciałbym jeszcze zapytać, czym różni się taka dynamiczna alokacja pamięci od takiej zwykłej, tak jak w programie na poniższym zdjęciu:

Jest na odwrót - to co pokazałeś, `int tab[ile];`, nie tylko nie jest "zwykłe", ale w ogóle nie jest w standardzie C++a. Tak się składa że działa w Twoim kompilatorze, ale to dlatego że ma takie rozszerzenie. W innym kompilatorze, jak MSVC (lub w Twoim kompilatorze w trybie bez rozszerzeń), `int tab[ile];` już nie zadziała jeśli `ile` nie jest stałą.

W każdym różnica jest taka, że `new int[ile]` alokuje na stercie i wymaga późniejszej dealokacji, a `int tab[ile]` umieszcza je na stosie, więc z natury ich czas życia jest związany z tą funkcją (jest też ograniczony małym rozmiarem stosu).

Podobne pytania

0 głosów
0 odpowiedzi 1,077 wizyt
pytanie zadane 18 marca 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
1 odpowiedź 575 wizyt
0 głosów
2 odpowiedzi 170 wizyt
pytanie zadane 1 września 2018 w C i C++ przez FrancuzZ Nowicjusz (120 p.)

93,103 zapytań

142,077 odpowiedzi

321,571 komentarzy

62,445 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...