Razlika između dvodimenzionalnog polja i niza nizova može da se objasni na nekoliko nivoa: strukturalno, načinom alociranja memorije i fleksibilnošću. 


1. Dvodimenzionalno polje

  • To je kontinuirani blok memorije koji sadrži sve elemente.

  • Svi redovi imaju isti broj kolona.

  • Primer u C#:

int[,] matrica = new int[3, 4]; // 3 reda, 4 kolone
matrica[0, 0] = 1;
  • Karakteristike:

    • Fiksna veličina reda i kolone.

    • Brži pristup elementima jer je memorija linearno alocirana.

    • Sintaksa pristupa: matrica[i,j].


2. Niz nizova (jagged array)

  • To je niz čiji su elementi drugi nizovi.

  • Redovi mogu imati različite dužine.

  • Primer u C#:

int[][] nizNizova = new int[3][];
nizNizova[0] = new int[2]; // prvi red ima 2 kolone
nizNizova[1] = new int[4]; // drugi red ima 4 kolone
nizNizova[2] = new int[3]; // treći red ima 3 kolone

nizNizova[0][0] = 5;
  • Karakteristike:

    • Svaki red može imati različitu dužinu.

    • Memorija se alocira po redovima, nije nužno kontinuirana.

    • Pristup elementima: nizNizova[i][j].


3. Uporedna tabela

Osobina Dvodimenzionalno polje Niz nizova
Veličina kolona po redu Fiksna, ista za sve redove Može biti različita
Alokacija memorije Kontinuirana Po redovima (nije kontinuirana)
Sintaksa pristupa matrica[i,j] nizNizova[i][j]
Fleksibilnost Niska Visoka (različite dužine redova)
Performanse Brži pristup Malo sporiji zbog dodatnog nivoa referenci

Ovo može da se uradi u C-u, ali način implementacije je malo drugačiji nego u C#:


1. Dvodimenzionalno polje u C-u

U C-u se koristi sintaksa sa dve dimenzije:

#include <stdio.h>

int main() {
    int matrica[3][4]; // 3 reda, 4 kolone
    matrica[0][0] = 1;
    matrica[1][2] = 5;

    printf("%d\n", matrica[0][0]);
    printf("%d\n", matrica[1][2]);
    return 0;
}
  • Svi redovi imaju istu dužinu.

  • Memorija je kontinuirana (redovi jedan za drugim u memoriji).


2. Niz nizova (jagged array) u C-u

C nema ugrađeni "niz nizova" kao C#. Umesto toga, koristi se niz pokazivača:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int* nizNizova[3]; // niz 3 pokazivača na int
    nizNizova[0] = (int*)malloc(2 * sizeof(int)); // prvi red 2 kolone
    nizNizova[1] = (int*)malloc(4 * sizeof(int)); // drugi red 4 kolone
    nizNizova[2] = (int*)malloc(3 * sizeof(int)); // treći red 3 kolone

    nizNizova[0][0] = 5;
    nizNizova[1][3] = 10;

    printf("%d\n", nizNizova[0][0]);
    printf("%d\n", nizNizova[1][3]);

    // oslobodi memoriju
    free(nizNizova[0]);
    free(nizNizova[1]);
    free(nizNizova[2]);

    return 0;
}
  • Svaki red može imati različitu dužinu.

  • Memorija se alocira po redovima, nije nužno kontinuirana.

  • Moramo ručno osloboditi memoriju koristeći free().


U nastavku je primer ispisa dvodimenzionalnog polja i niza nizova u C#:

using System;

class Program
{
    static void Main()
    {
        int[,] matrica = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        Console.WriteLine("Dvodimenzionalno polje:");
        for (int i = 0; i < matrica.GetLength(0); i++) // broj redova
        {
            for (int j = 0; j < matrica.GetLength(1); j++) // broj kolona
            {
                Console.Write(matrica[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}

Rezultat:

Dvodimenzionalno polje:
1 2 3 
4 5 6 
7 8 9

using System;

class Program
{
    static void Main()
    {
        int[][] nizNizova = new int[3][];
        nizNizova[0] = new int[] {1, 2};
        nizNizova[1] = new int[] {3, 4, 5};
        nizNizova[2] = new int[] {6};

        Console.WriteLine("Niz nizova:");
        for (int i = 0; i < nizNizova.Length; i++)
        {
            for (int j = 0; j < nizNizova[i].Length; j++)
            {
                Console.Write(nizNizova[i][j] + " ");
            }
            Console.WriteLine();
        }
    }
}

Rezultat:

Niz nizova:
1 2 
3 4 5 
6

Last modified: Wednesday, 1 October 2025, 4:04 PM