C 언어 개열/C 언어

구조체(Structure)

본클라쓰 2010. 8. 22. 09:31

 

 구조체란 여러 개의 서로 다른 변수들의 집합을 말한다. 이 때 묶이는 서로 다른 변수들은 자료형에 상관하지 않는다. 구조체의 유용성은 하나의 상태를 나타낼 수 있는 여러 데이터를 하나로 묶어서 사용하는 것이다. 예를 들어, 주소는 이름, 도, 시, 구/군 등등으로 이루어져 있고 이것을 하나로 묶어 구조체 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