공부/C

C언어로 배우는 프로그래밍 기초 11주차

0202_hyeon 2024. 7. 15. 09:05
반응형
SMALL

제 13장 구조체와 공용체

01. 구조체와 공용체

02. 자료형 재정의

03. 구조체와 공용체의 포인터와 배열

 

구조체 개념

여러 자료형의 통합체인 학생, 교수, 강좌 등을 새로운 하나의 자료형인 구조체로 정의

 

구조체 정의 방법

//구조체 틀 : 정의

struct lecture

{

    char name[20]; //강좌명

    int credit; //학점

    int hour;  //시수

};

 

struct lecture datastructure;   //구조체를 자료형으로 사용

//구조체 정의 없이는 자료형 struct lecture를 사용할 수 없다.

 

구조체 정의 구문 

//태그 이름은 식별자 역할

 

구조체 변수 선언

 

구조체 변수의 초기화

struct 구조체태그이름 변수명 = {초기값1, 초기값2, 초기값3, .... };

 

struct account

{

    char name[12];  //계좌주이름

    int actnum;   //계좌번호

    double balance; //잔고

};

 

struct account mine = {"홍길동", 1001, 300000};

struct account mine = {"한국인", 1001};  //멤버 balance에는 double형 기본값인 0.0이 저장

 

//구조체 초기화에서 멤버의 순서와 관계없이 ".멤버이름 = 초기값"으로 지정된 멤버에 초기값"으로 지정된 멤버에 초기값을 저장(designated initializer)할 수 있다.

struct account me = (.name = "홍길동", .balance = 50000};

printf("%s %d  %.2f\n", me.name, me.actnum, me.balance);

 

구조체의 멤버 접근 연산자 .과 변수 크기

ex)구조체 정의와 구조체 변수 선언

 

 

구조체 멤버로 사용되는 구조체

struct date

{

    int year;  //년

    int month; //월

    int day; //일

};

 

struct account

{

    struct date open; //계좌 개설일자

    char name[12]; //계좌주 이름

    int actnum;  //계좌번호

    double balance; //잔고

};

struct account me = {{2022,3,9},"홍길동",1001,3000000};

     

 

ex)구조체 멤버로 다른 구조체 형 포함

구조체 정의의 위치

 

구조체 변수의 대입과 동등비교

데이터 타입이 똑같으면 one = hong; 가능(위 그림 참조, 가능함)

but 비교연산자는 동작 안함(아래 그림 참조, 오류남)

같은지 비교할려면 멤버 요소 별로 비교해줘야 함(아래그림 참조)

 

구조체 정의와 비교

 

char*와 char[]비교

//즉, 업테이트하려고하거나 scanf하려고 하면 포인터 사용 불가! char배열로 써야 함.

//배열에서 조심할 부분: 배열 이름에 바로 assign불가

 

공용체 개념

공용체? 모든 멤버가 동일한 메모리 공간을 공유, 메모리 공간을 절약

멤버 중 가장 큰 친구를 기준으로 메모리 할당된다.

데이터에 따라 어떨 때는 int가, 어떤 때는 float이 들어올 때, 경우에 따라 저장해야 할 게 다를 때 공용체(union)을 사용함

 

공용체 정의 및 변수 선언

 

공용체 크기와 초기화

공용체 변수의 크기: 4바이트, 4바이트, 8바이트 순

공용체 초기화

-처음 선언한 멤버의 초기값으로만 저장이 가능

 

구조체처럼 공용체도 멤버의 순서와 관계없이 ".멤버이름 = 초기값"으로 지정된 멤버에 초기값을 지정할 수 있다.

union date value = {.real = 3.78};

printf("%.2f\n", value.real};

 

공용체 멤버 접근

 

ex)

 

ex2)

 

 

자료형 재정의

typedef

 

자료형 재정의 

 

ex1)  typedef

 

 

ex2)

ex3)

 

구조체 동적할당

ex4)

구조체와 공용체의 포인터와 배열

구조체 포인터 변수 선언

포인터 변수의 구조체 멤버 접근 연산자 ->

p->name

 

구조체 포인터의 선언과 사용

ex)

 

 

공용체 정의와 변수 선언 및 사용

 

공용체 정의와 변수 선언 및 사용

 

구조체 배열 변수 선언 

 

구조체 배열을 선언한 후 내용 출력

 

ex2)

 

구조체 배열: 동적할당

반응형
LIST