구조체란 여러 개의 서로 다른 변수들의 집합을 말한다. 이 때 묶이는 서로 다른 변수들은 자료형에 상관하지 않는다. 구조체의 유용성은 하나의 상태를 나타낼 수 있는 여러 데이터를 하나로 묶어서 사용하는 것이다. 예를 들어, 주소는 이름, 도, 시, 구/군 등등으로 이루어져 있고 이것을 하나로 묶어 구조체 address로 표현할 수 있다.
구조체의 선언(Structure declaration)
struct tag {
// 관련 자료형
}변수명;
위의 태그(tag)는 구조체의 이름이다. 자료형이 struct 인 tag 자료형을 새로 선언하는 것이다.
struct address {
char name[30];
char street[40];
char city[20];
};
구조체 선언 시점에는 실제로 메모리에 생성되는 것이 아니다. 단지 특정 자료의 형식만 구조적으로 정의하는 것이다. 또한, 선언시에 태그(tag)나 변수명 둘 중 하나를 생략할 수 있다.
1. 태그를 생략하고 선언한 구조체
#include <stdio.h>
struct {
int a;
int b;
}value;
int main(void) {
struct value;
value.a = 10;
value.b = 20;
printf("1 = %d \n", value.a);
printf("2 = %d \n", value.b);
return 0;
}
2. 변수명을 생략하고 선언한 구조체
#include <stdio.h>
struct test {
int a;
int b;
};
int main(void) {
struct test value;
value.a = 10;
value.b = 20;
printf("1 = %d \n", value.a);
printf("2 = %d \n", value.b);
return 0;
}
위의 방법처럼 태그(Tag)나 변수명은 선언할 때 둘 중 하나는 생략할 수 있다.
※ 배열과 구조체의 차이점
배열 | 구조체 |
- 배열의 모든 요소는 같은 자료형이어야 한다. - 인덱스를 사용하여 각 요소에 접근 |
- 다른 형의 자료형으로 구성될 수 있다. - 각 요소는 이름을 갖는다. - 이름에 의해 각 요소를 접근한다. |
구조체의 맴버 접근
: 구조체의 각 멤버들은 도트(.) 연산자를 이용하여 접근한다.
#include <stdio.h>
struct number {
int a;
int b;
};
int main(void) {
struct number value;
value.a = 10;
value.b = 20;
printf("1 = %d \n", value.a);
printf("2 = %d \n", value.b);
return 0;
}
구조체 치환
: 하나의 구조체에 포함된 정보는 치환문을 이용하여 같은 형의 또 다른 구조체에 치환될 수 있음
struct value {
int a;
int b;
};
struct value x,y;
x.a = 10;
x.b = 20;
y = x; // 이렇게 값을 전달하는 것이 가능
'C 언어 개열 > C 언어' 카테고리의 다른 글
선행처리기(Preprocessor) (0) | 2010.08.22 |
---|---|
Call by Value 와 Call by Address (0) | 2010.08.22 |
포인터(Pointer) 변수 (0) | 2010.08.21 |
register 변수 (0) | 2010.08.21 |
재귀함수(Recursive Function) (0) | 2010.08.21 |