Below is the part of code I am stuck on. I want to dynamically allocate memory for
- Pointer to array
- Array of pointers
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]);
 }
 }
}
 halfer
 
 20.2k19 gold badges110 silver badges207 bronze badges
 
 1 Answer 1
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;
}
 answered Sep 14, 2015 at 9:55
 
 
 
 BLUEPIXY 
 
 40.2k7 gold badges37 silver badges73 bronze badges
 
 
 Sign up to request clarification or add additional context in comments.
 
 
 
 14 Comments
SKD
 Thanks a lot. It really helped. Though, in 1st program, M still getting the 'Type conversion' error..
  BLUEPIXY
 @Sujit Perhaps you are using C++ compiler as C compiler. (cast from 
  void * no need in C ), try array = (int (*)[nrows][ncolumns])malloc(nrows * ncolumns * sizeof(int));SKD
 I am using Dev-C++ compiler. Thanks once again. Now both progrmas are running well.
  SKD
 Means? Where to add & which option?
  BLUEPIXY
 @Sujit add example of 
  3> option. M.M's comment for int (*array)[ncolumns]  | 
 lang-c
 
 
 
mallocing these things until you can write the code without it.array[i]is a two-dimensional array,array[i][j]is a one-dimensional array. In 2),array[i][j]is an (uninitialised) pointer, not anint.array[nrows][ncolumns]is an element outside the array; assigning to it is undefined.scanf("%d", &array[i][j]);andprintf("%d", array[i][j]);