지금까지의 방법과 다른 점은 구조체 명이 없다는 것입니다. 구조체에 대한 선언을 다시 하고자 하여도 구조체 명이 없어 선언할 수가 없습니다. 이런 방법들과 다른 방법에 대해서 고민해보았습니다.
구조체의 초기화
구조체 변수를 선언한 뒤 구조체의 각 멤버를 초기화하는 방법으로는 구조체의 각 멤버를 개별적으로 초기화하는 방법이 있습니다. 예를 들어, 다음은 위에서 정의한 구조체 record를 위한 구조체 변수 data를 선언하고, 각 멤버를 초기화하는 것입니다.
struct record data;
data.id = 100101;
strcpy(data.name,"ABC");
data.age = 10;
다른 형태의 초기화로는 아래와 같이 배열을 초기화할 때 사용한 방법과 같은 방법을 이용하여 구조체 변수를 초기화할 수 있습니다.
예를 들어, 구조체 record를 이용하여 구조체 변수를 초기화하는 방법은 다음과 같습니다.
struct record data = {100101, "ABC", 10};
또 다른 형태의 초기화로는 다음과 같이 이미 초기화되어 있는 구조체 변수를 새롭게 선언한 구조체 변수에 할당(assign)하는 방법이 있습니다.
예를 들어,
struct record Tom;
tom = Johnson;
는 다음과 같은 의미를 갖습니다.
struct record Tom;
Tom.id = Johnson.id;
strcpy(Tom.name, Johnson.name);
Tom.age = Johnson.age;
함수의 매개변수 또는 반환 값으로서의 구조체
C 언어에서 함수를 호출할 때 그 함수에게 매개변수를 전달할 수 있습니다. 이러한 매개변수로서 사용될 수 있는 것은 C 언어에서 사용하는 기본적인 데이터형 뿐만 아니라 구조체와 같은 사용자가 정의한 데이터형도 사용될 수 있습니다. 예를 들어 구조체를 매개변수로 갖는 함수의 정의 및 호출은 다음과 같은 형태를 가지고 있습니다.
struct anyType {......};
.
.
.
struct anyType anyVariable;
.
.
.
fnt(anyVariable);
.
.
.
void fnt(struct anyType abc)
{
.
.
.
}
이것은 함수 fnt를 호출할 때 매개변수로서 구조체 anyType의 구조체 변수 anyVariable을 사용하였고, 함수 fnt는 호출자로부터의 매개변수를 제대로 전달받기 위해 변수 abc의 데이터 형으로 구조체 anyType을 이용하였습니다. 이러한 방식의 매개변수 전달 방식의 예는 다음과 같습니다. 다음의 프로그램은 main() 함수에서 초기화된 구조체 변수를 structOut() 함수를 호출하여 출력하는 단순한 기능을 수행합니다.
매개 변수로서 구조체 예제
#include <stdio.h>
struct simple{
int x;
int y;
};
void structOut(struct simple para)
{
printf("X=%d : Y =%d \n", para.x, para.y);
}
int main(void)
{
struct simple Simple = {10, 20 };
structOut(Simple);
}
함수의 반환 값으로서 C언어의 기본적 데이터 형뿐만 아니라 구조체도 사용될 수 있으며, 그 형태는 다음과 같습니다.
struct anyType{...};
.
.
.
struct anyType anyVariable;
.
.
.
anyVariable = fnt(); ②
.
.
.
struct anyType fnt() ①
{
.
.
.
return structAnyTypeVariable;
}
①은 함수 fnt의 반환 값의 데이터 형이 구조체 anyType임을 선언한 것이며, ②는 함수 fnt의 반환 값을 구조체 변수 anyVariable에 넣는 (assign) 것을 나타내고 있습니다. 구조체를 반환하는 함수의 예는 다음과 같습니다.
반환 값으로서의 구조체 예시
#include <stdio.h>
struct rec{
int x;
int y;
};
struct rec Fnt()
{
struct rec rv = {10, 20};
return rv;
}
main(void)
{
struct rec Rec;
Rec = Fnt();
printf("X=%d Y=%d\n", Rec.x, Rec.y);
}
댓글