[c언어] 배열 첨자를 에스터리스크로 바꾸기

    #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 타입이므로 주소이다.

    반응형

    댓글

    Designed by JB FACTORY