[c언어] 배열 첨자를 에스터리스크로 바꾸기
- 카테고리 없음
- 2020. 11. 25.
#define _CRT_SECURE_NO_WARINGS
#include<stdio.h>
#include<string.h>
int total(int a, int b, int c);
float avg(int a, int b, int c);
int main()
{
int select = 0;
int num1 = 0;
int num2 = 0;
int mat = 0, kor = 0, eng = 0;
//한 반당 3명, 3개의 반이 있고, 한 명당 국, 영, 수, 총점, 평균
int student[3][3][3] = { 0, };
char name[3][3][10]; //이름 저장하기
//무한 루프
do {
printf("1. 입력 / 2. 전체 출력 / 0. 종료 \n");
rewind(stdin);
scanf("%d", &select);
rewind(stdin);
switch (select)
{
case 1:
printf("반 등록 (1 ~ 3) \n");
scanf("%d", &num1);
printf("%d", num1);
rewind(stdin);
printf("학생 등록 (1 ~ 3)\n");
scanf("%d", &num2);
rewind(stdin);
printf("성적 등록 \n");
printf("이름 입력 하기 : ");
//scanf("%s", &name[num1 - 1][num2 - 1]);
scanf("%s", *(*(name+(num1 - 1))+(num2 - 1)));
printf("국어 점수 : ");
scanf("%d", &kor);
rewind(stdin);
printf("영어 점수 : ");
scanf("%d", &eng);
rewind(stdin);
printf("수학 점수 : ");
scanf("%d", &mat);
rewind(stdin);
//student[num1 - 1][num2 - 1][0] = kor;
*(*(*(student + (num1 - 1))+(num2-1))) = kor;
//student[num1 - 1][num2 - 1][1] = eng;
*(*(*(student + (num1 - 1)) + (num2 - 1))+1) = eng;
//student[num1 - 1][num2 - 1][2] = mat;
*(*(*(student + (num1 - 1)) + (num2 - 1)) + 2) = mat;
break;
//전체 출력
case 2:
printf("반\t번호\t/ 이름\t국어\t영어\t수학\t총점\t평균\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
//입력 안된 것을 제외하고 모두 출력하기
//if (avg(student[i][j][0], student[i][j][1], student[i][j][2]) != 0)
if(avg(**(*(student+i)+j), *(*(*(student+i)+j)+1), *(*(*(student+i)+j)+2)) != 0)
{
//printf("%d\t%d\t/ %s\t%d\t%d\t%d\t%d\t%f\n", i + 1, j + 1, name[i][j], student[i][j][0], student[i][j][1], student[i][j][2], total(student[i][j][0], student[i][j][1], student[i][j][2]), avg(student[i][j][0], student[i][j][1], student[i][j][2]));
printf("%d\t%d\t/ %s\t%d\t%d\t%d\t%d\t%f\n", i + 1, j + 1, *(*(name+i)+j), **(*(student+i)+j), *(*(*(student+i)+j)+1), *(*(*(student + i) + j) + 2), total(**(*(student + i) + j), *(*(*(student + i) + j) + 1), *(*(*(student + i) + j) + 2)), avg(**(*(student + i) + j), *(*(*(student + i) + j) + 1), *(*(*(student + i) + j) + 2)));
}
}
}
break;
default:
break;
}
} while (select != 0);
return 0;
}
int total(int a, int b, int c)
{
return a + b + c;
}
float avg(int a, int b, int c)
{
return (a + b + c) / 3;
}
※ 체크하고 넘어가기
#include<stdio.h>
int main()
{
int a[10];
printf("%d %d \n", (a + 5) - a, (int)(a + 5) - (int)a);
printf("%d\n", (a + 5));
printf("%d\n", a);
printf("%d\n", (int)(a + 5));
printf("%d", (int)a);
return 0;
}
결과값이 다르다는 것을 확인 할 수 있습니다.
앞의 숫자는 pointer가 현재 5를 가르키므로 5 입니다.
뒤의 숫자는 int 타입 x pointer 값의 결과로 20
여기서 주의점은 출력 된 것은 어디까지나 pointer 타입이므로 주소이다.
반응형