Computer Science/C\C++

[C언어] 구조체 (Structure)

hyunjin 2021. 5. 26. 22:36

구조체

  • 데이터를 하나로 모으기 위함
  •  지금까진 개별 변수로 나타냈음.
    struct student{
    
        int number; //학번
        char name[10]; //이름
        double grade; //학점
        
    };//세미콜론 잊지말기!!!
    

 함수내에서 사용할때

 int main(void){
     struct student s1;//구조체 변수 선언
     ...
 }

구조체 초기화

//함수 밖에서도 초기화 가능한듯
struct student s1={24,"KIM",4.3};
//number=24, name[0]='K',name[1]='I', name[2]='M', name[3]=\0, grade=4.3

구조체 멤버의 접근

  • 구조체 변수의 멤버에 접근할라면 dot(.)연산자 사용

Typedef 이용

typedef struct student{

    int number; //학번
    char name[10]; //이름
    double grade; //학점
    
} STUDENT;//1.이런식으로 쓰기도 하고

typedef struct student STUDENT; //2. 이렇게 쓰기도 함.STUDENT가 struct student를 대신하도록 typedf 선언

int main(void){
    STUDENT st1;
    ...
    return 0;
}

 

typedef와 #define 비교

  • 이식성을 높여준다.
  • #define을 이용해도 typedef랑 비슷한 효과를 낼수있다.

구조체 변수 활용

  • 함수 인자로 전달, 반환 가능
  • 대입연산자, 피연산자 사용 가능
  • 사칙연산 불가능

구조체와 구조체 포인터

void ShowPersonData(person * ptr){ //구조체 person의 주소 값을 인자로 전달
    prtinf("이름: %s \n", (*ptr).name);
    printf("주민등록번호: %s \n",(*ptr).ID); //1. 이런식으로 구조체 변수에 접근
    printf("나이: %u \n", ptr->age); //2. 이런식으로도 구조체 변수에 접근 가능
}
  • (*ptr).name //구조체 자체를 불러옴
  • ptr->age //위와 동일
  • (*ptr).name과 ptr->name은 완전히 동일

 

구조체 변수도 구조체의 멤버가 될수 있다.

 

공용체(union)

  • 같은 메모리 영역을 여러개의 변수가 공유
  • 가장 큰 메모리형 기준
  • 덮어쓰기

열거형 선언

  • enum days{ Sun, Mon, Tue, Wed, Thu, Fri, Sat };
  • 변수가 가질 수 있는 값들을 미리 열거해놓은 자료형
  • days란 변수에 열거되있는 값중 하나의 값만 가질 수 있다.
  • 값을 지정하지 않으면 0부터 할당
enum days today; // 열거형 변수 선언
today=Sun;