8.2 구조체 필드의 초기화     [gdoc]     [smts]

 구조체를 초기화하는 방법은 선언과 동시에 초기화하는 방법과 이미 선언된 구조체를 초기화시키는 방법 두 가지가 있다. 선언과 동시에 초기화하는 예를 들면 다음과 같다.


ex08-01

#include <stdio.h>

typedef struct {
double x;
double y;
} Point;

int main(int argc, char **argv) {
Point a = {1.0, 1.0}; //<--
}

이렇게 Point타입으로 a란 변수를 만들면서 해당하는 값을 바로 넣어주는 방법을 사용할 수 있으며 이 방법을 사용할 때에는 해당 구조체의 멤버변수 순서와 같은 차례로 초기값을 넣어야 한다.

 구조체 변수를 먼저 선언하고 나중에 필드를 초기화시키는 방법도 있다. 같은 예를 들면 다음과 같다.


ex08-02

#include <stdio.h>

typedef struct {
double x;
double y;
} Point;

int main(int argc, char **argv) {
   Point a;
   a.x = 1.0; //<--
   a.y = 1.0; //<--
}

여기서 a.x는 a라는 구조체 변수의 필드 x를 나타낸다. a.y는 필드 y를 나타낸다. 이와 같이 구조체 변수의 필드는 점(.)으로 구분하여 접근한다.


 다른 예로 Person이라는 구조체를 작성해 보자. 필드로는 나이와 키 그리고 이름 정보를 가지고 있어야 한다..


ex08-03.c
#include <stdio.h>

typedef struct {
char strName[10];
int iAge;
float fHeight;
} Person;

int main(int argc, char **argv) {
Person park = {"salesio", 45, 171.5};
Person jang = {"sophia", 45, 165.0};
printf("name:%s, age:%d, height:%.1f\n",
             park.strName, park.iAge, park.fHeight);
printf("name:%s, age:%d, height:%.1f\n",
             jang.strName, jang.iAge, jang.fHeight);
}
실행 결과
name:salesio, age:45, height:171.5
name:sophia, age:45, height:165.0

이 예에서 Person구조체의 필드는 세 개로 strName, iAge, fHeight 이고 각각 문자열 변수, 정수형 변수, 실수형 변수이다. park과 jang이라는 Person 구조체 변수를 생성한 뒤 각각의 필드를 출력하는 예제이다.


   같은 구조체형이라면 대입연산자 =를 이용해서 모든 멤버변수의 값을 복사할 수 있다. 즉, 다른 구조체 변수의 필드값으로 새로운 구조체 변수의 필드를 초기화할 수 있다. 앞에서 예를 든 Point 구조체를 이용하여 예를 들어보자.


ex08-04.c

#include <stdio.h>

typedef struct {
double x;
double y;
} Point;

int main(int argc, char **argv) {
Point a = {1.1, 1.2};
Point b = a; // a를 이용하여 b를 초기화
Point c = b; // b를 이용하여 c를 초기화
c.y = 2.0;
printf("a = {%f, %f}\n", a.x, a.y);
printf("b = {%f, %f}\n", b.x, b.y);
printf("c = {%f, %f}\n", c.x, c.y);
}

실행 결과

a = {1.100000, 1.200000}
b = {1.100000, 1.200000}
c = {1.100000, 2.000000}

위에서 Point변수 c는 필드 y가 2.0으로 변경되었으며 출력 결과에 그것이 반영되어 있음을 알 수 있다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

8.4 구조체를 필드로 가지는 구조체  (0) 2016.04.15
8.3 구조체를 함수의 인자로 넘기기  (0) 2016.04.15
8.1 구조체의 정의  (0) 2016.04.15
6.5 문자열과 포인터  (0) 2016.04.15
6.4 배열과 포인터  (0) 2016.04.15
Posted by 살레시오

댓글을 달아 주세요