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

deklarowanie tablicy

Object Storage Arubacloud
0 głosów
297 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 Ekspert (344,860 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 815 wizyt
pytanie zadane 18 marca 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
1 odpowiedź 402 wizyt
0 głosów
2 odpowiedzi 140 wizyt
pytanie zadane 1 września 2018 w C i C++ przez FrancuzZ Nowicjusz (120 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!

...