A sentimental robot

다차원포인터 동적메모리할당 본문

C

다차원포인터 동적메모리할당

GOD03219 2017. 12. 29. 20:45

#include<stdio.h>
#include<stdlib.h>  // 동적메모리 헤더파일
#pragma warning (disable:4996)
void main()
{
 char scoName[6][10] = { "Name","Kor","Eng","Math","Total","Avg" };
 char(*name)[10];     // 한 행당 10개를 가지고 있는 2차원 배열을 가르키고있는 포인터
 int(*score)[4];
 float *avg;

 int num, i, j;

 

 printf("How many students?");
 scanf("%d", &num);

 

 name = (char(*)[10])calloc(num, sizeof(char) * 10);     // 포인터를 이용하여 num만큼 동적메모리로 할당 , 한 행당 10byte
 score = (int(*)[4])calloc(num, sizeof(int) * 4);         // 한 행당 4byte니까 *4
 avg = (float *)calloc(num, sizeof(float));

 

 for (i = 0; i < num ; i++)
 {
  printf("%s input : ", scoName);
  rewind(stdin);
  scanf("%s", name[i]);        // name : 2차원배열 >행의 이동

 

  for (j = 0 ; j < 3;  j++)
  {
   printf("%s input : ", scoName[j + 1]);
   rewind(stdin);
   scanf("%d", *(score + i) + j);
   *(*(score + i) + 3) += *(*(score + i) + j);

  }

 

  *(avg + i) = *(*(score + i) + 3) / 3.f;

 }
 
 for (i = 0; i < 6; i++)
 {
  printf("%s\t", scoName[i]);
 }
 puts("");


 for (i = 0; i < num; i++)
 {  
  printf("%s\t", name[i]);

  for (j = 0; j < 4; j++)
       printf("%d\t", *(*(score + i) + j));
  printf("%f\n", *(avg + i));


 }

 

 free(name);
 free(score);
 free(avg);

}

 


 

[ ] 사용해보기


 

 

#include<stdio.h>
#include<stdlib.h>
#pragma warning (disable:4996)

void main()
{
 
 char scoName[6][10] = { "Name","Kor","Eng","Mat","Total","Average" };
 char(*name)[10];
 int(*score)[4];
 float *avg;

 int num, i,j;


 printf("how many?");
 scanf("%d", &num);


 name = (char(*)[10])calloc(num,sizeof(char)*10);
 score = (int(*)[4])calloc(num, sizeof(int) * 4);
 avg = (float*)calloc(num, sizeof(float));
 
 for (i = 0; i < num ; i++) {


  printf("%s", scoName);
  scanf("%s", name[i]);


  for (j = 0; j < 3 ; j++) {
   printf("%s", scoName [j+1]);
   scanf("%d", &score[i][j]);
   score[i][3] += score[i][j];


  }


  avg[i] = score[i][3] / 3.f;

 

 }


 for (i = 0; i < 6; i++)
      printf("%s\t", scoName[i]);
 puts("");


 for (i = 0; i < num ; i++) {
  printf("%s\t", name[i]);


  for (j = 0; j< 4; j++)
       printf("%d\t", score[i][j]);

  printf("%f\n", avg[i]);


 }


 free(name);
 free(score);
 free(avg);



}


'C ' 카테고리의 다른 글

동적메모리할당함수 호출하기(방법1)  (0) 2017.12.29
3차원배열  (0) 2017.12.29
구조체 동적메모리  (0) 2017.12.29
구조체배열 포인터  (0) 2017.12.29
구조체 포인터  (0) 2017.12.29