2011년6월23일_구조체(struct), 구조체배열, 구조체포인터
구조체의 원형, 선언, 정의(typedef) |
구조체의 원형과 선언을 따로 하는 방법…
1: //구조체의 원형
2: struct suman { //예약어, 태그
3: char think[20]; //멤버 또는 필드라 부름.
4: int heal;
5: int condition;
6: };
7:
8:
9: //구조체의 선언
10: struct suman bread1; //bread의 자료형은 구조체 suman
11: struct suman b1, b2, b3, *bap; //여러개 선언가능. bap은 구조체를 가리키는 포인터 변수
구조체의 원형과 선언을 한꺼번에 해결하나 하나의 변수만 사용가능.
1: //구조체의 원형과 선언을 동시에 하기. 단 하나의 변수 선언시에만 가능.
2: struct suman { //예약어, 태그
3: char think[20]; //멤버 또는 필드라 부름.
4: int heal;
5: int condition;
6: } bread1; //변수명
7:
8: //또는 태그를 생략하고 선언가능.
9: struct { //예약어
10: char think[20]; //멤버 또는 필드라 부름.
11: int heal;
12: int condition;
13: } bread1; //변수명
typedef을 이용해 SUMAN을 구조체 타입으로 정의…
많이 쓰인다고 하니 앞으로 이 방식대로 코딩하자.
1: // typedef을 이용한 구조체정의 (많이 쓰이는 방식)
2: typedef struct sm_tag {
3: char think[20]; //멤버 또는 필드라 부름.
4: int heal;
5: int condition;
6: } SUMAN; //자료형으로 정의됨.
7:
8: // 태그생략
9: typedef struct {
10: char think[20]; //멤버 또는 필드라 부름.
11: int heal;
12: int condition;
13: } SUMAN; //자료형으로 정의됨.
구조체배열 |
1: // 태그생략
2: typedef struct {
3: char think[20]; //멤버 또는 필드라 부름.
4: int heal;
5: int condition;
6: } SUMAN; //자료형으로 정의됨.
7:
8:
9: SUMAN bread[5]; //구조체배열의 선언
10:
11: //구조체배열의 각 원소들은 bread[4]부터 시작하여 순서대로 stack영역에 쌓인다.
12: bread[0].think[], bread[0].heal, bread[0].condition //구조체배열의 첫 번째 원소들
13: bread[1].think[], bread[1].heal, bread[1].condition //구조체배열의 두 번째 원소들
14: bread[2].think[], bread[2].heal, bread[2].condition //구조체배열의 세 번째 원소들
15: bread[3].think[], bread[3].heal, bread[3].condition //구조체배열의 네 번째 원소들
16: bread[4].think[], bread[4].heal, bread[4].condition //구조체배열의 다섯 번째 원소들
구조체배열은 배열과 같이 stack의 위에서 부터(주소가 낮음) 연속적으로 배치된다.
일반변수는 이와 다르게 밑에서 부터(주소가 높음) 쌓인다.
구조체를 가리키는 포인터 |
아직 잘 몰라서 사용하기 꺼려진다.
<핵심코드(?)>
1: //구조체포인터
2: typedef struct {
3: char think[20]; //멤버 또는 필드라 부름.
4: int heal;
5: int condition;
6: } SUMAN; //자료형으로 정의됨.
7:
8:
9: int iNum;
10: SUMAN bread, *sp; //구조체를 가리키는 포인터
11:
12: //주소넘겨주기
13: sp = &bread;
14:
15: //엑세스법
16: sp->heal = 60; //(*sp).heal = 60; 과 같이 heal에 60을 대입.
17: iNum = sp->heal; //iNum = (*sp).heal;과 같이 heal의 값을 읽어와 iNum에 대입.
18:
19:
<예제코드>
1: #include <stdio.h>
2:
3: typedef struct {
4: char name[20];
5: int heal;
6: int condition;
7: } SUMAN;
8:
9: int main()
10: {
11: int iNum;
12: SUMAN bread, *sp;
13:
14: sp = &bread;
15:
16: iNum = 100;
17: sp->heal = 60;
18: printf("%d\n", sp->heal);
19:
20: sp->heal = iNum;
21: printf("%d\n", sp->heal);
22:
23: return 0;
24: }
참조(Reference) |
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년6월24일_고수준/저수준파일입출력(임시제목) (0) | 2011.06.27 |
---|---|
2011년6월24일_2차원 동적배열을 달팽이 배열에 적용하여 사용자가 입력한 크기의 배열출력 (0) | 2011.06.24 |
2011년6월23일_C과제11(동적배열(메모리동적할당), 2차원 동적배열) (0) | 2011.06.24 |
2011년6월22일_NASM으로 어셈블한 프로시저를 C Code에서 호출 (1) | 2011.06.23 |
2011년6월21일_AT91SAM7S256 spec (미완성) (0) | 2011.06.22 |