구조체를 초기화하는 방법은 선언과 동시에 초기화하는 방법과 이미 선언된 구조체를 초기화시키는 방법 두 가지가 있다. 선언과 동시에 초기화하는 예를 들면 다음과 같다.
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.5name: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++' 카테고리의 다른 글
(C언어) 구조체 변수를 필드로 가지는 구조체 (0) | 2016.02.01 |
---|---|
(C언어) 구조체를 함수의 인자로 넘기기 (0) | 2016.02.01 |
(C언어) 구조체(struct) 정의 (0) | 2016.01.29 |
Windows 7에서 MinGW 설치하고 설정하기 (0) | 2015.06.30 |
C++ 의 객체 배열의 동적 생성과 반환 (1) | 2015.06.29 |