Alokacja dynamicznych tablic w różnej organizacji.

0

Hej, cała treść polecenia na załączonym zdjęciu.
title
Chciałbym abyście powiedzieli mi czy dobrze myślę z tymi organizacjami i czy dobrze je zadeklarowałem. Na alokację numer 3 jeszcze nie mam pomysłu i proszę tutaj o wskazówki i ewentualne wytknięcie błędów w pozostałych alokacjach.

int main()
{
    int i = 0;
    int j = 0;
    int rows,columns;
    rows=4;
    columns=4;

    //ORGANIZACJA1 - rows x columns
    int ** tab1;
    tab1 = (int**)calloc(rows,sizeof(int*));
    for (i = 0; i<columns; i++)
        {
            tab1[i] = (int*)calloc(columns,sizeof(int));
        }
    //ORGANIZACJA2 - rows x columns
    int ** tab2;
    tab1 = (int**)calloc(columns,sizeof(int*));
    for (i = 0; i<rows; i++)
        {
            tab2[i] = (int*)calloc(rows,sizeof(int));
        }

    //ORGANIZACJA3 - int (* array_3)[columns]


    //ORGANIZACJA4 - rows*columns

    int *tab3 = (int*)calloc(rows*columns,(sizeof(double)));


    return 0;
}

0

W punkcie trzecim pewnie chodzi o coś takiego:

int arr[5][4] = {
    {1,2,3,4},
    {1,2,3,4},
    {1,2,3,4},
    {1,2,3,4},
    {1,2,3,4}
};

int(*array_3)[4] = arr;

Wydaje mi się, że wielkość tablic w tym momencie musi być stałą.

  1. wygląda ok
  2. źle, zadanie wyraźnie wymaga, aby dane były ułożone ciągle, a wielokrotne wywoływanie alokatora to uniemożliwia
  3. czemu sizeof(double)?
0
  1. Wpadłem na takie rozwiązanie alokacji numer 2 jednak nie jest ono moje. Jeżeli jest poprawne to czy mógłby ktoś mi je wyjaśnić?
int *temp;
    temp=(int*)calloc(rows*columns,sizeof(int));
    array_2=(int**) malloc(rows*sizeof(int*));
    for(i=0;i<rows;i++)
        array_2[i]=temp+i*columns;
  1. Czyli dla przykładu jeżeli
int (*pa)[];   /* wskaźnik 'pa' wskazujący na tablicę liczb całkowitych typu int */

to mamy tutaj tablicę dwuwymiarową, zgadza się ?

  1. Faktycznie pomyliłem się, zamiast double ma być int.

Dopiero zaczynam zabawę ze wskaźnikami więc proszę o wyrozumiałość :D

0
  1. wygląda dobrze. Tworzysz tablicę wskaźników i tablicę ciągłą taką jak w zadaniu 4. Kolejne wskaźniki są ustawiane od odpowiednie offsety tej tablicy, odpowiadające kolejnym wierszom
  2. w sumie tak
  3. od tego jest forum ;​)
0

Tak dokładniej chodzi mi o to przypisanie

for(i=0;i<rows;i++)
       array_2[i]=temp+i*columns;

one jest dla mnie troszkę niejasne :(

A co do alokacji numer 3, również należy stworzyć dodatkową tablicę? Jak to ugryźć ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1