Structure   구조체

(2020-06-30)

C 언어 구조체, 구조체 데이터, 구조체 포인터

1. [C 언어]  구조체

  ㅇ 1 이상의 다른 데이터형을 갖는 변수들을 모아둔 집합체

  ㅇ 사용 목적
     - 여러 관련 변수들을 하나의 의미로 묶을 때 유용
     - 특정 목적에 맞는 새로운 자료형의 생성 등


2. [C 언어]  구조체의 특징구조체의 강점  :  다채로운 데이터 표현 능력
     - 단지 개별 변수,배열 만으로는 표현에 한계 있음
     - 구조체는 그 이상으로 데이터 표현 능력을 향상시킴

  ㅇ 구조체의 역할  :  일종의 데이터형 역할
     - 개별 변수 보다는 레코드 형식의 변수에 대한 일종의 데이터형으로의 역할도 가능 
     - 따라서, 구조체를 사용하여 새로운 데이터형도 만들 수 있음

  ㅇ 구조체명명 규칙  :  통상적인 C 명명 규칙에 따름
     - 변수명의 통상적인 C 명명 규칙에 따라 작성
     - 단, 구조체 태그명(구조체이름)은, 대문자로 시작함이 관례임

  ㅇ 구조체의 확장  :  클래스
     - 바로 객체지향언어C++에서의 클래스3. [C 언어]  구조체정의,선언

  ※ ☞ 구조체 정의 및 선언 참조
     - 구조체 정의 : 구조체 구성 정보를 자세하게 컴파일러에게 알려 줌
     - 구조체 선언 : 구조체 변수를 만들어 실제 기억 공간을 확보/할당하게 됨

  ㅇ 구조체선언,정의프로그램 내 위치는?
     - 통상, 프로그램 내 main 함수 밖에 위치시킴
     - 만일, main 함수 내 위치하면, 그 안에서 만 사용 가능


4. [C 언어]  구조체메모리 확보동적 메모리 할당에 의함
     - 형식) struct 구조체명 *포인터명 = malloc(sizeof(struct 구조체명));
        . 즉, `구조체 포인터`의 선언동적 메모리 할당

     - 이와같이, 구조체에 할당된 결과적인 메모리 위치는, `구조체 포인터`로 가리킴


5. [C 언어]  구조체의 멤버(구성요소) 구조체의 구성 요소 : 멤버 또는 필드 라고도 함
     - 구조체 멤버의 예는, 변수,배열,포인터 또는 다른 구조체 일 수도 있음
     - 한편, C++에서는 함수도 멤버로써 가능

  ㅇ 구조체 멤버(구성 요소)로의 접근
     - 일반 구조체의 멤버 접근 : 도트(.) 연산자 사용
        . 형식) 구조체명.요소명;
     - 구조체 포인터의 멤버 접근
        . 화살표(->) 연산자 사용
           .. 형식) 구조체포인터명->요소명;
        . 또는, 구조체 포인터역참조에 의해 해당 구조체의 멤버 접근 : 
           .. 형식) (*구조체포인터).요소명
     - 구조체의 멤버가 포인터일 때의 멤버 접근
        . 형식) *구조체변수.멤버 또는 *구조체포인터.멤버


6. [C 언어]  참고사항
 
  ㅇ 구조체의 복사/복제
     - 단지 구조체 변수들 만으로,
     - 대입문(a = b = c;)에 쓰면,
     - 해당 구조체 내 모든 요소들이 복제됨

  ㅇ 구조체의 초기화 형식
     - struct 구조체태그명 구조체변수명 = { .멤버명1=값1, .멤버명2=값2, .멤버명3=값3, ... };
     - 또한, 멤버명 없이도 가능하나, 이때는 정의된 순서가 같아야 함
        . struct 구조체태그명 구조체변수명 = { 값1, 값2, 값3, ... };

  ㅇ 구조체의 배열 선언
     - struct 구조체태그명 구조체배열변수명[크기];
        . 구조체배열변수명 : 구조체태그명으로 선언된 구조체들을 원소로 갖는 배열명


[구조체,공용체] 1. C 구조체 2. C 구조체 정의,선언 3. C 공용체

 
        최근수정     요약목록     참고문헌