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

Zapis macierzy c++

Object Storage Arubacloud
0 głosów
1,155 wizyt
pytanie zadane 16 czerwca 2019 w C i C++ przez V3ga Nowicjusz (170 p.)
Witam, mam pewien problem, macierz możemy zapisać na dwa sposoby, np. A[i][j] lub *(*(A+i)+j).

Jednak gdy mam przepisać zapis A[i][20], gdzie A to macierz 10 na 20, na zapis wskaźnikowy to nie jestem pewna czy ma to wyglądać tak *(*(A+i)+19)? Widziałam zapis A[i][2] przekształcony na *(*(A+i)+2), z czego by wynikało że w pierwszym przypadku zamiast 19 ma być 20, ale odwołując sie do macierzy za pomoca wskaznika nie wskazywalibyśmy na komórkę pamięci która nie istnieje??

1 odpowiedź

+1 głos
odpowiedź 16 czerwca 2019 przez criss Mędrzec (172,590 p.)

nie wskazywalibyśmy na komórkę pamięci która nie istnieje??

tak, ale to kwestia za dużej liczby a nie zapisu :D 

tzn. "nie istnieje"... istnieje, ale nie należy do tej tablicy 

komentarz 16 czerwca 2019 przez V3ga Nowicjusz (170 p.)
Wiec zapisy powinny wyglądać tak A[i][2] --> *(*(A+i)+1) , A[i][20] --> *(*(A+i)+19) ?
1
komentarz 16 czerwca 2019 przez criss Mędrzec (172,590 p.)
Nie,
A[i][2] --> *(*(A+i)+2), A[i][20] --> *(*(A+i)+20) z tym że to z 20 jest po prostu niepoprawne skoro ostatni indeks to 19
komentarz 16 czerwca 2019 przez niezalogowany
edycja 17 czerwca 2019

@V3ga,

nie wiem ci ci to pomoże, ale do mnie przemawia zapis przy używaniu wskaźników, to nie ma czegoś takiego jak tablice wielowymiarowe w kompie tylko kolejno ułożone komórki pamięci

np tab [2][4] pierwsza wypełniona jedynkami a druga dwójkami wygląda tak

1 1 1 1 2 2 2 2

0 1 2 3 4 5 6 7 tyle trzeba dodać do wskaźnika tab by dostać się do poszczególnej komórki, ale trzeba mieć wskaźnik do wsk=&A[0][0];

tutaj kod może coś dodatkowo pomoże

#include <iostream>
#define fe(x) cout<<#x<<"="<<x<<endl;
using namespace std;

int main()
{
    int tab[2][4]{{0,1,2,3},{4,5,6,7}};
fe(tab[1][3]);
fe(*(*(tab+1)+3));//tego sam nie kumam

int* wsk=&tab[0][0];
fe(*(wsk+7));
wsk++; wsk++; // przesuniecie wskaźnika o na &A[0][2]
fe(*(wsk+5));
    return 0;
}

na wyjściu

tab[1][3]=7
*(*(tab+1)+3)=7
*(wsk+7)=7

*(wsk+5)=7

 

Podobne pytania

0 głosów
0 odpowiedzi 167 wizyt
pytanie zadane 27 maja 2023 w C i C++ przez natalia2002. Początkujący (370 p.)
0 głosów
2 odpowiedzi 5,478 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)
0 głosów
3 odpowiedzi 883 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez J0ker Pasjonat (15,400 p.)

92,555 zapytań

141,402 odpowiedzi

319,552 komentarzy

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

...