일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- #CallByAddress
- #binary
- #bubbleSort
- 하이퍼레저패브릭
- #2차원배열
- #C++ 연산자함수오버로딩
- html object
- html5 new tag
- relative path
- #자바상속#자바이즈어#is~a
- mac terminal command
- html charset
- html youtube
- html plug-in
- hyperledger transaction
- border-box
- #JAVASCRIPT
- docker example
- #성적관리프로그램
- html video
- #android activity
- 토큰경제
- html id
- html code
- html multimedia
- #3차원배열
- #다차원포인터
- #1차원배열
- git flow
- #C++ has~a
- Today
- Total
A sentimental robot
다차원포인터 동적메모리할당 본문
#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);
}