컴퓨터 과학/C Language

Chapter 03. 구조체 정의

계란💕 2022. 2. 1. 23:08

3.1 구조제 정의 및 선언 

  Def)

     - 구조체: 사용자가 C언어의 기본 데이터 타입(Data Type)을 가지고 새롭게 정의할 수 있는 사용자 정의 타입을 의미.

                (데이터 타입 중 가장 큰 타입)

     -  데이터 타입(Data Type): int, char, float, double 처럼 변수를 선언할 때 정의해야 하는 자료형

     -  typedef: 구조체 이름이 길 때 짧게 재정의 할 수 있다.

     -  구조체의 멤버(member), 멤버 변수: 구조체를 구성하는 변수.

  Ex)

<hide/>

#include <stdio.h>
#include <string.h>

struct Student
{
    char Name[10];

    int Age;

    double Height;
};

int main()
{
    int i, n;
    struct Student KimRan[10]; //  구조체 변수 선언, 자료형(struct Student), 변수명(KimRan)

    scanf("%d", &n );

    for(i = 0;i < n; ++i)
    {
        scanf("%s", KimRan[i].Name); // char 배열은 배열처럼 입력, 출력.
        scanf("%d", &KimRan[i].Age); // 변수에 저장할 떄는 &를 꼭 붙인다.
        scanf("%lf", &KimRan[i].Height);

    }
    for(i = 0;i < n; ++i)   // n명의 이름 나이 키를 출력.
    {
        printf("%s\n", KimRan[i].Name);
        printf("%d\n", KimRan[i].Age);
        printf("%lf\n", KimRan[i].Height);
    }

    return 0;
}

`     

 

3.2 구조체를 쓰는 이유는?

  Note)  기존 자료형(int, double, char) - built in type <--> structure type

           내가 필요한 자료형은 "양수" 길이 자료형-> size width;  자료형 변수명;

           그럼 폭을 줄이려고 __width; 시에 음수가 되면  컴파일 에러가 발생한다.

           "학생 자료형" -> Student KimRan;//  자료형 변수명;

 

  Note)기존 자료형 중에 long double 이 큰 편이지만 구조체는 더 크게 정할 수 있다.

  

  Ex) 

<hide/>


#include <stdio.h>

typedef struct Student // 자료형으로 정리 , 구조체이름(Student)
{
    char Name[30];
    int Age;
    double Tall;

}Student_t; // struct Student 대신에 Student_t로 재정의. 

int show()
{
    Student_t KimRan; // 구조체 변수 선언 

    KimRan.Age = 20;

    return KimRan.Age;
}

int main()
{
    printf("%d", show());

    return 0;
}

 

3.3 구조체 정의 규칙

  - 전역에서 정의

  - 키워드: "struct"

  - 구조체 이름은 자유롭게 정할 수 있음.

 

  Note) "구조체도 "자료형"이다" -> 그럼 "point to 사용자정의자료형"도 되지 않을까?

           point to int = int* pNum; ( int*: 자료형, pNum: 변수명 )

 

3.4 포인터 변수를 이용한 구조체

  - 구조체 변수로 멤버(member)를 접근할 때 사용하는 연산자는 온점(.)이다.

  - 구조체 포인터 변수로 멤버를 접근할 때는 화살표(->)를 사용.

Ex)

<hide/>


#include <stdio.h>

struct point
{
    int x;
    int y;

};

int main()
{
    struct point ptStart; // pt: point 자료형의 약자 
    struct point* pptStart; // ppt:  ptr, pointer의 약자 
    pptStart = &ptStart;

    scanf("%d %d", &pptStart->x, &pptStart->y );
    printf("%d %d\n", ptStart.x, ptStart.y  ); // 구조체 변수로 멤버에 접근(.) 
    printf("%d %d\n", (*pptStart).x , (*pptStart).y  );
    printf("%d %d\n", pptStart->x, pptStart->y ); // 구조체 포인터 변수로 멤버에 접근(->)

    return 0;
}

 

3.5 구조체 배열

  Def) 구조체를 여러 개 모은 것 

  Ex) !!!!!오류!!!!!!

<hide/>

#include <stdio.h>
#include <string.h>

struct Student
{
    int number;
    char name[20];
    double grade;

};

int main()
{

    struct Student KimRan[100];

    KimRan[2].number = 1004;
    strcpy( KimRan[2].name , "김란");
    KimRan[2].grade = 197.0;

    printf("%d %s %lf", &KimRan[2].number, KimRan[2].name, &KimRan[2].grade  );


}

 

3.6 구조체 반환

 

 

'컴퓨터 과학 > C Language' 카테고리의 다른 글

Chapter 02. 포인터(Pointer)  (0) 2022.01.30
Chapter 01. 함수(Function)  (0) 2022.01.30
2022-01-27 재귀함수  (0) 2022.01.28
2022-01-26 구조체 할당  (0) 2022.01.27
2022-01-24 포인터 연습  (0) 2022.01.25