Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Operator -> w tablicach dynamiczncyh.

Ostatnio zmodyfikowano 2015-09-07 14:42
Autor Wiadomość
jakubby
Temat założony przez niniejszego użytkownika
Operator -> w tablicach dynamiczncyh.
» 2015-09-07 12:15:18
Witam ! Jestem w trakcie uczenia się C++ , natrafilem na takie zadanie :
zad.6
Struktura Batonik ma trzy pola opisane w poprzednim ćwiczeniu. Napisz program tworzący trzyelementową tablicę struktur Batonik, inicjalizujący ją wybranymi wartościami oraz wyświetlający zawartość wszystkich struktur
zad.9
Ponownie wykonaj ćwiczenie 6, ale zamiast deklarować trzy struktury Batonik, zaalokuj tablicę dynamicznie, za pomocą operatora new.

Zadanie 9 probowalem rozwiazac w taki sposob:
C/C++
#include <string>
struct baton
{
    std::string name;
    double waga;
    int kcal;
};
int main()
{
    using namespace std;
    baton * snack = new baton[ 3 ];
    snack[ 0 ]->name = "snickers";
    snack[ 0 ]->waga = 126.3;
    snack[ 0 ]->kcal = 1240;
    snack[ 1 ]->name = "mars";
    snack[ 1 ]->waga = 161.4;
    snack[ 1 ]->kcal = 1444;
    snack[ 2 ]->name = "lion";
    snack[ 2 ]->.waga = 135.3;
    snack[ 2 ]->kcal = 1009;
    cout << "Marka: " << snack[ 0 ]->name << endl;
    cout << "Waga: " << snack[ 0 ]->waga << " gram" << endl;
    cout << "Ilośc kalorii " << snack[ 0 ]->kcal << " kcal" << endl;
   
    cout << "Marka: " << snack[ 1 ]->name << endl;
    cout << "Waga: " << snack[ 1 ]->waga << " gram" << endl;
    cout << "Ilośc kalorii " << snack[ 1 ]->kcal << " kcal" << endl;
   
    cout << "Marka: " << snack[ 1 ]->name << endl;
    cout << "Waga: " << snack[ 1 ]->waga << " gram" << endl;
    cout << "Ilośc kalorii " << snack[ 1 ]->kcal << " kcal" << endl;
   
    delete[] snack;
    return 0;
Wydawało mi się ,ze wraz z uzyciem komendy 'new' tworze strukture dynamiczna i wtedy musze skorzystac z operatora '->' , jednak program ulega kompilacji bez jakichkolwiek bledów jedynie kiedy zamiast "->" używam " . " .
P-137310
pekfos
» 2015-09-07 12:22:35
tworze strukture dynamiczna i wtedy musze skorzystac z operatora '->'
Ani jedno, ani drugie.
P-137311
jakubby
Temat założony przez niniejszego użytkownika
» 2015-09-07 12:46:59
Racja , napisalem to bez sensu , chodziło mi oczywiscie o wskaźniki , bo to w przypadku wskaznikow stosujemy -> ( przynajmniej tak mi sie wydaje) . Wydawało mi się ,że stworzyłem ów wskażnik komendą "baton * snack = new baton[3]" . Mimo tego ,że troszke źle sprecyzowałem posta nr 1 chcialbym abyś mnie delikatnie doedukował i stosunkowo jasno wytłumaczył , czemu nie moge korzystac z operatora "->" . Z góry dzieki za cierpliwość:> .
P-137317
pekfos
» 2015-09-07 13:01:47
Operator [] pobiera wartość z tablicy, nie adres.
P-137320
jakubby
Temat założony przez niniejszego użytkownika
» 2015-09-07 13:17:09
Nie wiem czy dobrze kombinuje . Czyli -> uzywam przy dynamicznych strukturach ,bo to one pobieraja wartość,tak ? A w przypadku dynamicznych tablic to [] pobiera wartosc ,wiec nie musze się "przejmować" ,że korzystam ze wskaznika ,tak ?
P-137322
Lora
» 2015-09-07 14:19:41
Wywołanie zmienna->cos jest równoznaczne z (*zmienna).cos . Element tablicy snack nie jest wskaźnikiem więc nie możesz użyć operatora dereferencji.
P-137324
jakubby
Temat założony przez niniejszego użytkownika
» 2015-09-07 14:26:19
Mam rozumiec ze element tablicy nie jest wskaznikiem ,lecz sama tablica jest wskaznikiem ? Nie do konca rozumiem ,poniewaz skorzystalem z komendy "baton * snack = new baton[3]" . Poniewaz gdy stowarzylem dynamiczna strukture np. "typ * nazwa = new typ" to wtedy bez problemu moge korzystac z nazwa->name .
P-137325
Lora
» 2015-09-07 14:35:05
Tak. Wywołując komendę baton * snack = new baton[3] rezerwujesz pamięć na tablicę o 3 elementach typu baton. wskaźnik snack jest wskaźnikiem na pierwszy element tej tablicy, a używając operatora dostępu [] wyłuskujesz dany element tablicy . Właściwie wywołanie snack[1] jest równoznaczne z *(snack + 1) .
C/C++
snack[ 1 ].kcal = 5;
( snack + 1 )->kcal = 10;
( *( snack + 1 ) ).kcal = 15;
Oczywiście mówimy tu o tablicach jednowymiarowych.
P-137326
« 1 » 2
  Strona 1 z 2 Następna strona