One Dimensional Array
int \*myarray = malloc(no\_of\_elements \* sizeof(int));
//Access elements as myarray\[i\]
2 Dimensional Array
Method1
int \*\*myarray = (int \*\*)malloc(nrows \* sizeof(int \*));
for(i = 0; i < nrows; i++)
{
myarray\[i\] = malloc(ncolumns \* sizeof(int)); //allocating 1 D array = number of elements in column
}
// Access elements as myarray\[i\]\[j\]
Method 2 (Contagious Allocation)
int \*\*myarray = (int \*\*)malloc(nrows \* sizeof(int \*));
myarray\[0\] = malloc(nrows \* ncolumns \* sizeof(int));
for(i = 1; i < no\_of\_rows; i++)
myarray\[i\] = myarray\[0\] + (i \* ncolumns);
// Access elements as myarray\[i\]\[j\]
In either case, the elements of the dynamic array can be accessed with normal-looking array subscripts: array[i][j].
Method 3
int *myarray = malloc(nrows * ncolumns * sizeof(int));
// Access elements using myarray[i * ncolumns + j]. i.e. you must now perform subscript calculations manually, accessing the i,jth element with array3[i * ncolumns + j]. (A macro can hide the explicit calculation, but invoking it then requires parentheses and commas which don’t look exactly like multidimensional array subscripts.)
Method4 Finally, you can use pointers-to-arrays:
int (\*array4)\[NCOLUMNS\] =
(int (\*)\[NCOLUMNS\])malloc(nrows \* sizeof(\*array4));
```, but the syntax gets horrific and all but one dimension must be known at compile time. **Three Dimensional Array**
#define MAXX 3
#define MAXY 4
#define MAXZ 5
main()
{
int \*\*\*p,i,j;
p=(int \*\*\*) malloc(MAXX \* sizeof(int \*\*\*));
for(i=0;i
{
p\[i\]=(int \*\*)malloc(MAXY \* sizeof(int \*));
for(j=0;j
p\[i\]\[j\]=(int \*)malloc(MAXZ \* sizeof(int)); //allocating 1D array of size = size of last dimensional...So we have to allocate //n1\*n2 such arrays...where n1 and n2 are 2 such dimensional.
}
for(k=0;k
for(i=0;i
for(j=0;j
p\[i\]\[j\]\[k\]=;
}