2015. 3. 7. 20:03ㆍ창고
1. 구조체란?
구조체(Structure)를 문장화하여 정의 내리면 "타입이 다른 변수들의 집합"이라고 할 수 있으며 더 간단하게 표현하면 이종 변수 집합이다. 배열은 동종의 변수 집합이다.
기본형식
1 | struct { 멤버목록 } 변수명; | cs |
구조체 변수가 하나만 필요하다면 위의 기본 형식을 따르면 된다. 하지만 태그를 정의하고 이 태그로 구조체 변수를 선언하는 것이 일반적이다. 구조체 태그는 열거형의 태그와 마찬가지로 타입에 대해 이름을 붙이는 것이다.
기본형식
1 | struct 태그명 { 멤버 목록 }; | cs |
키워드 struct 다음에 태그의 이름을 주고 멤버 목록을 나열한다. 태그도 일종의 명칭이므로 명칭 규칙에만 맞다면 자유롭게 사용해도 된다. 일반적으론 tag_라는 접두어를 사용한다.
C 컴파일러는 태그를 사용할 때 구조체 태그라는 것을 명확하게 알리기 위해 struct라는 키워드를 태그 앞에 붙인다.
C++ 에서는 태그가 하나의 타입으로 인정되기 때문에 struct 없이 태그명만으로도 구조체를 선언할 수 있다.
사용하기
3. 멤버 연산자
구조체의 멤버를 읽을 때는 멤버 연산자를 사용한다. 모양은 마침표와 같다. 즉 점(.) 하나로 되어 있다.
기본 형식
구조체.멤버명
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | struct tag_Friend { char Name[10]; int Age; double Height; }; void main() { tag_Friend Friend; strcpy(Friend.Name,"아무개"); Friend.Age=30; Friend.Height=178.2; printf("이름=%s, 나이=%d, 키=%.1f\n",Friend.Name,Friend.Age,Friend.Height); } | cs |
예시
1 2 3 | tag_Friend Friend; tag_Friend *pFriend; pFriend=&Friend; | cs |
pFriend 포인터가 가리키는 구조체의 멤버를 참조하고 싶다면?
첫번째 방법(* 연산자)
pFriend 포인터기 때문에 *연산자로 이 포인터가 가리키는 곳을 역참조하게 되면 곧 Friend가 된다.
(*Friend)는 곧 Friend와 같다.
Friend 접근 메모리 구조
1 | (*pFriend).Age = 30; | cs |
*pFriend 연산문이 1000번지에 있는 tag_Friend 형의 구조체를 먼저 읽으며 다음으로 멤버 연산자에 의해
이 번지의 Age 멤버를 읽는다.
정리하자면 구조체의 포인터 p가 있다면 (*p).멤버로 접근할 수 있다.
두번째 방법(-> 연산자)
포인터 멤버 연산자인 ->는 좌변에 구조체 포인터, 우변에 멤버 이름을 취한다.
포인터가 가리키는 번지에 저장된 구조체의 멤버를 읽는 연산자이다.
(*pFriend).Age => pFriend->Age
괄호가 없어 훨씬 더 직관적이다!
이것도 정리하자면 p->멤버로 접근하면 된다.
'창고' 카테고리의 다른 글
국기3기 정규수업 9&10일차 메모 (0) | 2015.03.11 |
---|---|
국기3기 정규수업 8일차 메모 (0) | 2015.03.09 |
20150308 토론정리 (0) | 2015.03.08 |
20150307 토론정리 (0) | 2015.03.07 |
20150306 토론정리 (2) | 2015.03.07 |
국기3기 정규수업 6&7일차 메모 (0) | 2015.03.07 |
(과제)입출력 함수들 비교 (0) | 2015.03.06 |