[C언어] 구조체

    구조체

     

    사용자정의 데이터 타입

    기존데이터타입을 묶어서 새로운 타입을 생성

     

    struct Score {

    char name[10];    //멤버 변수

    int kor, eng, mat, total;

    float avg;

     

    };

     

     

    만들고 나면 선처리부에 항상 등록해줘야 인식된다.

     

     

    구조체 변수선언

    struct Score aa;

    aa.kor = 10;

     

     

    구조체 사용하기

    #include<stdio.h>
    struct score;
    
    struct score
    {
    	char name[10];
    	int kor, eng, mat, total;
    	float avg;
    };
    
    int main() {
    
    	struct score student;
    
    	//scanf("%s", &student.name[0]);
    	scanf("%s", student.name);
    
    	scanf("%d", &student.kor);
    	scanf("%d", &student.eng);
    	scanf("%d", &student.mat);
    	student.total = student.kor + student.eng + student.mat;
    
    	student.avg = student.total / 3.f;
    
    
    
    	printf("국어\t영어\t수학\t총점\t평균\n");
    	printf("%d\t%d\t%d\t%d\t%f", student.kor, student.eng, student.mat, student.total, student.avg);
    	
    }

    scanf를 선언할때 반드시 주소를 가져와야 한다.

    그때 전 과정에서 배웠던 포인터는 구조체가 아닌, 구조체 내 멤버변수 기준으로 설명이 된다.

     

    단, 값으로 변형했을 경우 주소값으로 변형해주는 &의 경우 구조체 앞에 붙여야 한다.

     

    간혹 실수 하지 않도록 주의하면서 작성하도록 하자.

     

     

     

     

    구조체 사용하기, 두 번째

    #include <stdio.h>
    
    typedef struct score
    {
    	char name[10];
    	int kor, eng, mat, total;
    	float avg;
    }SCORE;
    
    int main()
    {
    	SCORE student;
    	SCORE* p;
    
    	p = &student;
    	//p->kor = 300;
    	//(*p).kor = 300;
    
    	printf("이름 입력 : ");
    	scanf("%s", p->name);
    	printf("국어 점수 입력 : ");
    	scanf("%d", &p->kor);
    	printf("영어 점수 입력 : ");
    	scanf("%d", &p->eng);
    	printf("수학 점수 입력 : ");
    	scanf("%d", &p->mat);
    
    	p->total = p->kor + p->eng + p->mat;
    	p->avg = (p->total) / 3.f;
    	
    	/* 출력 하기 */
    	printf("이름\t국어\t영어\t수학\t총점\t평균\n");
    	printf("%s\t%d\t%d\t%d\t%d\t%f", (*p).name, (*p).kor, (*p).eng, (*p).mat, (*p).total, (*p).avg);
    }

    위에서 구조체 사용하기 위해서는

    student.kor을 사용하였다.

     

    그러나 포인터를 사용하면서 사용 방법에 대한 선택지도 늘어났다.

    p->kor

    (*p).kor 사용이 가능해진다.

     

    *p.kor을 사용 할 경우에, 포인터가 먼저 실행이 되어서 kor을 인식이 되지 않는다.

    반응형

    댓글

    Designed by JB FACTORY