SKD
SKD

Reputation: 460

Memory allocation for pointer to array and array of pointer

Below is the part of code I am stuck on. I want to dynamically allocate memory for

I am getting several error messages like invalid conversion from int * to int and so on.

Pointer to array

int (*array)[nrows][ncolumns];
array = (int*)malloc(nrows * ncolumns * sizeof(int));


printf("\n Enter the elements:\n");

for(i=0; i<nrows; i++)
{
    for(j=0; j<ncolumns; j++)
    {
        scanf("%d", array[i][j]);   
    }
}

printf("Entered array is :\n\n");

for(i = 0;i<nrows; i++)
{
    for(j = 0; j<ncolumns; j++)
    {
        if(j== ncolumns-1)
        {
            printf("%d \n", *array[i][j]);
        }
        else
        {
            printf("%d", *array[i][j]);
        }

Array of pointers

int *array[nrows][ncolumns];
array[nrows][ncolumns] = (int*)malloc(nrows * ncolumns * sizeof(int));

printf("Enter elements:\n");

for(i = 0; i<nrows; i++)
{
    for(j = 0; j<ncolumns;j++)
    {
        scanf("%d",&array[i][j]);


    }
}


printf("Entered array is: \n");
for(i = 0; i<nrows; i++)
{
    for(j = 0; j<ncolumns;j++)
    {
        if(j == ncolumns-1)
        {
            printf("%d \n",array[i][j]);
        }
        else
        {
            printf("%d \t",array[i][j]);
        }


    }
}

Upvotes: 3

Views: 458

Answers (1)

BLUEPIXY
BLUEPIXY

Reputation: 40145

1> pointer to array

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

int main(void){
    int nrows    = 3;
    int ncolumns = 4;
    int i, j;

    int (*array)[nrows][ncolumns];//do you want <<int (*array)[ncolumns]>> ?
    //like as int src[nrows][ncolumns]; array = &src;
    array = malloc(nrows * ncolumns * sizeof(int));//(int*) : type mismatch

    printf("\nEnter the elements:\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            scanf("%d", &(*array)[i][j]);
        }
    }

    printf("Entered array is :\n\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            if(j != 0)
                putchar(' ');
            printf("%d", (*array)[i][j]);//need ( )
        }
        putchar('\n');
    }
    free(array);
    return 0;
}

2> Array of pointers

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

int main(void){
    int nrows   = 3;
    int ncolumns = 4;
    int i, j;

    int *array[nrows][ncolumns];
    int *src = (int*)malloc(nrows * ncolumns * sizeof(int));//no need (int*)

    printf("Enter elements:\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns;j++){
            array[i][j] = &src[ i * ncolumns + j];//pointer pointed to entity (src[ i * ncolumns + j])
            scanf("%d", array[i][j]);//type of array[i][j] is int *
        }
    }

    printf("Entered array is: \n");
    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            if(j != 0)
                putchar(' ');
            printf("%d", *array[i][j]);//need * for dereference
        }
        putchar('\n');
    }

    free(src);
    return 0;
}

3> option

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

int main(void){
    int nrows    = 3;
    int ncolumns = 4;
    int i, j;

    int (*array)[ncolumns];
    array = (int (*)[ncolumns])malloc(nrows * sizeof(*array));//sizeof(*array) : sizeof(int[ncolumns])

    printf("\nEnter the elements:\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            scanf("%d", &array[i][j]);
        }
    }

    printf("Entered array is :\n\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            if(j != 0)
                putchar(' ');
            printf("%d", array[i][j]);
        }
        putchar('\n');
    }
    free(array);
    return 0;
}

Upvotes: 4

Related Questions