Structure   구조체

(2022-01-23)

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


1. [C 언어]  구조체

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

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


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

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

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

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

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

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


4. [C 언어]  구조체메모리 확보 및 구조체 포인터동적 메모리 할당에 의해, 구조체메모리 확보 가능
     - (형식) malloc(sizeof(struct 구조체명))

  ㅇ 확보된 동적 메모리에 대한, 구조체 포인터선언 
     - (형식) struct 구조체명 *구조체포인터명 = malloc(sizeof(struct 구조체명));
        . 즉, 구조체에 할당된 결과적인 메모리 위치를, `구조체 포인터`로 가리키게 됨


5. [C 언어]  구조체의 멤버(구성요소) 

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

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


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

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

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



Copyrightⓒ written by 차재복 (Cha Jae Bok)       편집이력
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"