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

Vector i wskaznik.

Object Storage Arubacloud
0 głosów
360 wizyt
pytanie zadane 10 listopada 2021 w C i C++ przez Broski Nowicjusz (190 p.)

Witam Państwa i proszę o pomoc. Dlaczego linijka nr 40 cout << *pt_matrix << "\n"; nie wyrzuca mi wartości matrix[0][0]. Z góry dziękuje za odpowiedz. Pozdrawiam.

#include <iostream>
#include <vector>

using namespace std;

int main ()
{
    vector<vector<int>> matrix;
    auto rows=0, columns=0;
    cout << "Ile wierszy chcesz zadeklarowac?\n";
    cin >> rows;
    cout << "Ile kolumns chcesz zadeklarowac?\n";
    cin >> columns;

    matrix.resize(rows);
    for(int i=0;i<rows;i++)
    {
    matrix[i].resize(columns);
    }
    for (int i=0;i<rows;i++)
    {
        for (int j=0;j<columns;j++)
        {
            if(i==j)
            {
            matrix[i][j]=1;
            }
            else
            {
            matrix[i][j]=0;
            }

        cout << matrix[i][j]<<"\t";
        }
        cout << "\n";
    }   
    vector<vector<int>> *pt_matrix;
    pt_matrix = &matrix;
    cout << "Adres pierwszego wiersza,kolumny" << pt_matrix << "\n";
    cout << *pt_matrix << "\n";
    int liczba = 2021;
    int *pt_liczba;
    pt_liczba=&liczba;
    cout << *pt_liczba; 

  
    getchar();
     
}   

 

1 odpowiedź

+1 głos
odpowiedź 10 listopada 2021 przez adrian17 Ekspert (346,320 p.)

Ta linia ogólnie się nie skompiluje.

Wskaźnik wskazuje na vector<vector<int>>, więc dereferencja z użyciem * daje Ci... referencję na vector<vector<int>>. Którego cout nie potrafi wypisać.

Vector to złożony obiekt trzymający w środku własne wskaźniki na stertę. Samo posiadanie wskaźnika na vector nie ma żadnego związku z buforem który jest przez niego zarządzany (wartością matrix[0] czy matrix[0][0]).

W każdym razie adres pierwszego wiersza (tym samym adres na tablicę wierszy) to byłby

cout << matrix.data() << "\n";
cout << &matrix[0] << "\n"; // alternatywnie

A adres pierwszej komórki pierwszego wiersza (tym samym adres na tablicę komórek pierwszego wiersza):

cout << matrix[0].data() << "\n";
cout << &matrix[0][0] << "\n"; // alternatywnie

 

Podobne pytania

0 głosów
1 odpowiedź 924 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Ziom Początkujący (430 p.)
0 głosów
4 odpowiedzi 1,182 wizyt
pytanie zadane 21 lutego 2017 w C i C++ przez Danthee Początkujący (260 p.)
0 głosów
1 odpowiedź 453 wizyt
pytanie zadane 12 grudnia 2015 w C i C++ przez patryk16 Obywatel (1,080 p.)

92,691 zapytań

141,603 odpowiedzi

320,103 komentarzy

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

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!

...