본문 바로가기
C/이론 및 용어

구조체, typedef

by tokkiC 2022. 6. 6.

c언어에서는 같은 속성을 가진 변수들을 모아 메모리 상에서 연속되는 주소값을 갖는 하나의 데이터 묶음으로 표현한다

이를 구조체 structure type 라고 한다

구조체는 메모리 상에서 연속되는 주소값을 갖는다

메모리에서 연속되는 주소값을 갖는 것은 배열이므로, 구조체를 변수들의 배열로 볼수도 있다

변수를 저장가능하므로 배열, 주소값, 포인터도 저장가능하다

구조체 안에 구조체가 없으면 (중복 구조체가 아니면) 1차원 배열과 같다고 볼 수 있고,

n번의 중복을 가진 구조체라면 n차원 배열과 같다고 볼 수 있다 (=내부 변수로 배열을 갖는 경우)

배열의 성질을 갖기에 연속되는 주소값을 이용해서 포인터로 다룰수도 있을 것이다


구조체를 만들때는 일반적으로 다음과 같은 방법으로 선언, 초기화한다

strutct 구조체명 {
    자료형 변수명1;    // 구조체만 선언하고 내부 변수 선언은 따로 호출 전에 main등의 함수에서 선언, 초기화해도 된다
    자료형 변수명2;    // 여기서는 미리 구조체 선언 시 변수도 모두 선언한 케이스를 예로 들었다
    자료형 변수명3;
}

int main(void) {

    struct 구조체명.변수명1 = 변수명1의 자료형에 맞는 값
    struct 구조체명.변수명2 = 변수명2의 자료형에 맞는 값
    struct 구조체명.변수명3 = 변수명3의 자료형에 맞는 값
}

구조체는 호출해서 사용할때 꼭 struct 이라는 type을 구조체명 앞에 붙여쓰게 되니 중복되어 보기 좋지 않다

struct 를 떼고 구조체명만으로 써서 호출하기 위해서 typedef 로 타입을 정의하여 사용한다

typedef  타입a 타입a대신쓸값     // typedef 사용법

typedef struct 구조체명 {내부 데이터들...}            // typedef 로 구조체명만으로 struct 라는 타입을 갖게 재정의하였다

typedef strutct 구조체명 {       // typedef 사용 시 구조체명 생략가능! 중괄호 뒤의 별칭으로 호출도 가능!
    자료형 변수명1;            // 구조체만 선언하고 내부 변수 선언은 따로 호출 전에 main등의 함수에서 선언, 초기화해도 된다
    자료형 변수명2;             // 여기서는 미리 구조체 선언 시 변수도 모두 선언한 케이스를 예로 들었다
    자료형 변수명3;
} 구조체별칭

int main(void) {

    struct 구조체명.변수명1 = 변수명1의 자료형에 맞는 값  // 구조체명을 생략 시, 아래처럼 별칭으로 호출 가능하다
    구조체별칭.변수명2 = 변수명2의 자료형에 맞는 값        // 구조체명 생략은 typedef 가 적용된 구조체만 가능하다
    구조체별칭.변수명3 = 변수명3의 자료형에 맞는 값
}

익명이가 가득하다 행 - 복

'C > 이론 및 용어' 카테고리의 다른 글

전처리, 컴파일, 어셈블, 링크  (0) 2022.06.05

댓글