2014-12-03 2 views
-1

동적 2 차원 배열을 만들고 값을 할당하고 실수를 이해할 수 없습니다.C에서 동적 2 차원 배열에 값을 할당하는 방법

내 코드 :

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


void main() { 

    int **a; 
    int k; 
    int nrows, ncols; 
    int i, j, x; 

    printf("Enter number of rows and columns: \n"); 
    scanf("%d%d",&nrows,&ncols); 

    if((nrows >=5 && nrows <=10) || (ncols >=5 && ncols <=10)) 
    { 
     if(nrows == ncols){ 
      a = (int **)malloc(nrows * sizeof(int *)); 
      if (a == NULL) 
       exit(1); 
     }else{ 
      printf("Rows must be equal to Columns\n"); 
      exit(1); 
     } 
    }else{ 
     printf("Rows or Columns must be between 5 to 10\n"); 
     exit(1); 
    } 

    for(i = 0 ;i < nrows ; i++) { 
     *(a+i) = (int *)malloc(ncols * sizeof(int)); 
     if(*(a+i) == NULL) { 
      for(k = 0; k < i; k++){ 
       free(a[k]); 
       free(a); 
       exit(1); 
      } 
     } 
    } 


    printf("Write down your array:\n"); 

    for(i = 0 ; i < nrows; i++){ 

     *a = *(a + i); 
     for(j = 0; j < ncols; j++){ 

      scanf("%d", &x); 
      *(*a + j) = x; 
     } 

    } 


     printf("Your array is:\n"); 
     for(i = 0 ; i < nrows; i++){ 

     *a = *(a+i); 
     for(j = 0; j < ncols; j++){ 

      printf("%d ", *(*a + j)); 
     } 

     printf("\n"); 
    } 

} 

답변

0

의 선

*a = *(a + i); 

문제 위치 : 첫 번째 열 포인터를 변경한다. 당신은 아마

int* tempColumnPointer = *(a + i); 

몇 가지 팁처럼 여기서 뭔가를하고 싶어 : *(a + i)

  • 심지어 a[i][j] 대신 *(*(a + j) + i)을 사용할 수있는 것보다

    1. a[i] 더 잘 읽을 수있다.
    2. 매트릭스를 하나의 단일 메모리 청크로 할당하지 않는 이유는 무엇입니까?
  • 관련 문제