C/C++
안녕하십니까.
구조체 멤버에 대해서 설명 드리도록 하겠습니다.
내용이 미흡 하더라고 이해해 주시고 많은 조언 부탁 드립니다.
1. 구조체 멤버란?
point라는 구조체를 정의 하며 구조체의 자식에는 x,y 가 있습니다. 이를 가르켜 구조체 멤버라 합니다.
구조체 멤버는 '.'을 사용하여 데이터의 값을 읽거나 씁니다.
앞에 구조체 이름과 '.'을 찍는 것을 제외하고는 변수들의 치환과 똑같이 사용하면 되고 배열과 달리
구조체 변수는 치환이 됩니다. 즉 array1= array;를 하면 array1의 멤버 array0의 값은 10이 됩니다.
static struct array_struct array = {10,20,30}; 구조체의 멤버들의 값을 초기화 하는것 입니다.
이렇게 하면 array.array0, array.array1, array.array2에 각각 10, 20, 30의 값이 보관됩니다.
키워드 static를 잠깐 설명하겠습니다. static과 같이 알아야 할 키워드는 auto, static, extern, register가 있습니다.
C 언어에서 이들 키워드는 본래 식별자를 어떤 메모리에 보관할 것인가를 결정하기 위해 구별을 한 것입니다.
하지만 결과적으로 식별자를 누가 사용할 수 있는가, 그리고 식별자를 얼마동안 보관할 것인가 등에 영향을 주어
복잡한 형태가 되었있습니다.
auto 는 stack 에 식별자를 보관하라는 것이고, register 는 CPU 의 register 에 식별자를 보관하라는 것입니다.
extern 과 static 은 메모리의 한 부분을 할당받게 됩니다. register에 보관을 하는 이유는 속도를 향상시키기 위해서 입니다.
auto와 register는 stack과 register를 사용하므로 블록이 끝나면 식별자가 없어집니다. 결과적으로 선언을 한 블록 안에서만
사용이 가능합니다. 반면에 extern과 static은 메모리를 할당받기 때문에 하나의 프로그램이 시작하여 끝날 때까지 식별자를
보관합니다. 사용가능 범위는 조금 복잡합니다. 알아 두어야 할 사항은 함수(main 함수 포함) 밖에서 식별자를 선언하면 같은
파일에 있는 함수들은 모두 이 식별자를 사용할 수 있습니다. 이 식별자를 다른 파일에 있는 함수들이 사용하기 위해 extern을
선언합니다. 반면에 다른 파일에 있는 함수들이 이 식별자를 사용하지 못하게 할 때 static를 사용합니다.
다시 구조체 멤버로 돌아 가겠습니다. 구조체의 멤버이름은 다른 구조체의 멤버의 이름과 같은 것을 사용할 수 있습니다.
왜냐하면 구조체의 멤버를 사용하려면 항상 구조체 변수명을 멤버이름 앞에 붙이기 때문입니다.
2. 예제로 보는 구조체 멤버
struct date { int month; int day; int year; } struct time { int hour; int min; int sec; } struct date_ time { struct date today; struct time now; }
읽어 주셔서 감사합니다!