구조체와 공용체

2023. 5. 19. 12:16개발하는중/c

728x90
반응형

 

구조체의 개념

structure

서로 다른 자료형을 갖는 자료들의 모임을 하나의 자료형으로 정의하여 사용하는 자료형

사용자 정의 자료형 = 다양한 형식의 자료를 간결한 형식으로 표현 가능, 사용자가 정의하여 쉽게 사용 가능

 

구조체의 정의와 변수 선언

정의

 

형식

sturct 구조체명 {

멤버;

멤버;

.....

};

 

선언

struct 구조체명 변수명1, 변수명2;

 

구조체 변수의 초기화 및 참조

 

초기화

ex) struct person {

char name[8];

int age;

char sex;

};

struct person X={“이순신”, 1900, ‘남자’};

 

struct person {

char name[8];

int age;

char sex;

} X={“이순신”, 1900, ‘남자’};

 

참조

형식

구조체변수명.멤버명 ex) X.name;, X.age;, X.sex;

 

구조체 기억공간 구조

실제로 메모리가 할당될 때는 구조체 멤버중 가장 큰 자료형의 크기로 할당됨

 

구조체 배열

동일한 구조를 갖는 구조체 변수가 여러개 사용 될 때 그 구조체 변수들을 대표하는 배열명을 설정하여 일반 배열과 같이 사용

 

ex)

struct person {

char name[8];

int age;

char sex;

} X=[3];

 

struct person {

char name[8];

int age;

char sex;

};

struct person X[3];

 

초기화

struct person X[3] = {

{“이순신”, 1900, ‘남자’},

{“이순신”, 1900, ‘남자’},

{“이순신”, 1900, ‘남자’}

};

 

구조체 포인터

포인터를 사용하여 구조체를 다룰 수 있게 함

-구조체를 보다 쉽게 다룰 수 있음

-구조체변수 선언시 *를 붙여 포인터로 선언

-구조체 포인터는 포인터와 동일하게 주소 값을 갖게되며 자료가 있는 곳을 가르킴

 

선언

형식 : struct 구조체명 *포인터 변수명;

struct person *X;

struct person {

char name[8];

int age;

char sex;

};

struct person man;

struct person *pt;

pt = &man;

 

참조

토스 연산자 이용

(*pt).name

포인터 연산자를 이용

pt -> name

 

함수와 구조체

함수에서의 구조체 사용

 

구조체를 함수의 매개변수로 사용

일반 변수를 함수의 매개 변수로 사용하는 것과 동일

매개변수가 구조체인 경우 함수의 형식 매개변수를 구조체로 선언

해당 구조체가 전체가 복사 돼서 편리

구조체 전체가 복사되기 떄문에 시간이 많이 걸리고 기억공간 낭비 심함

 

구조체 포인터를 함수의 매개변수로 사용

일반적으로 구조체 포인터를 함수의 매개변수로 사용

구조체를 복사하지 않기 때문에 실행속도가 향상, 기억공간 효율 좋음

 

typedef

이미 존재하는 자료형에 새로운 이름을 붙이기 위한 키워드

간단하거나 의미있는 이름으로 변경 할수 있어 이해하기 쉬움

구조체 형을 선언하는데 많이 사용

typedef 기존자료형 새로운자료형;

typedef int INT;

 

ex)typedef unsigned int BYTE;

BYTE val; -> 컴파일러가 unfigned int 로 해석함

typedef int *PTR

PTR p1, p2; -> int *p1, *p2 로 해석함

 

구조체 bit field

주기억장치의 기억공간을 byte 단위가 아닌 bit 단위로 사용

프로그램 시 bit 단위의 연산이 필요할 경우 int형 변수를 사용 이때 int형은 4byte(32 bit)이므로 1bit를 제외한 31bit의 기억공간 낭비

 

 

기억공간의 효율적으로 사용하기 위해 사용, 융통성 있는 데이터 구조체 생성 가능

 

정의

struct 비트필드명 {

자료형 비트필드변수 : 비트크기;

};

 

struct test{

unsigned a : 1;

unsigned b : 2;

}

 

주의사항

비트필드의 자료형은 intunsigned로 선언

포인터나 배열은 사용안됨

전체 크기는 시스템이 제공하는 int의 크기 이내여야함

 

공용체의 개념

동일한 기억장소에 여러 유형의 자료를 저장하기 위해서 선언한 자료형

공용체 안에 포함된 자료들이 같은 기억장소를 공유,사용

사용될 자료의 자료형이 유동적일 경우 기억 공간을 효율적으로 사용할수 있음

 

ex) 공용체 멤버들이 완전히 다른 자료형을 가질 때 기억공간을 절약 위해 사용

공용체 사용시 필요에 따라 자료형 메모리의 자료형을 선택해서 값저장 가능

 

정의

union 공용체명 {

멤버 1;

멤버 2;

.....

}

ex) union test{

char a;

int b;

.....

}

 

선언

union 공용체명 변수명;

ex) union test temp;

 

참조

temp.a = ‘B’;

temp.b = 777;

 

공용체의 사용

사용되면 공용체의 멤버 중에서 자료크기(byte )가 가장 큰 멤버에 대해서만 기억공간이 할당 되고, 기억공간의 시작 위치부터 각 부분을 다른 멤버가 공용으로 사용

728x90

'개발하는중 > c' 카테고리의 다른 글

배열과 포인터  (0) 2023.05.03
함수와 기억클래스  (0) 2023.04.26
제어문  (0) 2023.04.03
연산자  (0) 2023.04.03
표준 입출력 함수  (0) 2023.04.03