반응형

구조체(2)

 

※ 구조체 변수 생성 ※

 

구조체도 하나의 자료형이라는 걸 명심하자.

 

일단 구조체를 정의했으면, 이 구조체를 이용하여 구조체 변수를 생성해 보자.

 

구조체는 기본 자료형들과 똑같이 사용하여 변수들을 생성하면 된다.

 

다만 앞에 struct가 붙는 것이다.

 

ex :

 

struct student
{
	int number;
	char name[10];
	double grade;
};

int main(void)
{
	struct student s1;
};

 

위의 코드는 student라는 구조체를 이용하여 s1이라는 구조체 변수를 만든 것이다.

 

바로 윗줄의 밑줄부분이 이해 안 되면

 

student라는 자료형을 이용하여 s1이라는 구조체 변수를 만든 것이라고 해석해도 된다.

 

처음에는 지금까지 써왔던 자료형들과 비교되게 어려울 수 있다.

 

암튼, s1이라는 변수 안에는 구조체의 멤버인 number, name, grade가 들어있다.

 

s1에는 실제로 메모리 공간이 할당되며 s1이 차지하는 메모리 공간의 크기는

 

각 멤버들의 크기를 합치면 알 수 있다. 

 

위의 코드의 구조체 student의 메모리 공간의 크기는 4 + 10 + 8 이므로 22가 된다.

 

컴파일러는 액세스 속도를 빠르게 하기 위해 더 많은 메모리를 할당하는 경우도 있어서,

 

sizeof 연산자를 이용하는 편이 정확하다.

 

그리고 위의 코드와 같이 소스 파일의 처음 부분에서 구조체 선언 및 정의를 하게 되면,

 

전역 변수처럼 저 구조체 정의를 소프 파일 전체에서 사용해서 변수를 만들 수 있다.

 

만약 구조체 정의를 특성 함수 안에서 하면 지역 변수처럼 

 

그 함수에서만 구조체 정의를 사용하여 변수를 만들 수 있다.

 

하나의 문장에서 여러 개의 구조체 변수를 선언할 수 있다.

 

보통 변수들은 int a, b; 와 같이 자료형 하나에 두 개의 변수를 한 문장에 선언할 수 있는데,

 

구조체 변수도 struct student s2, s3;처럼 여러 개의 구조체 변수를 선언할 수 있다.

 

다만 앞에 struct 키워드가 붙는 것을 명심해둔다.

 

참고로 구조체의 선언 및 정의와 변수 선언을 동시에 할 수 있다.

 

이 경우는 구조체 정의 다음에 변수 이름을 써주면 된다. 

 

ex : 

 

struct student
{
	int number;
	char name[10];
	double grade;
} s1;

 

이는 

 

main함수나 특정 함수 내에서 struct student s1; 처럼

 

구조체 변수를 선언하는 방법과 동일한 역할을 한다.

 


 

 

※ 구조체의 초기화 ※

 

구조체의 선언과 구조체 변수의 선언이 분리된 경우는 구조체 변수 선언 뒤에서 초기화한다.

 

구조체 변수의 초기화는 배열과 비슷한데, 멤버들의 초기값을 중괄호 안에서 나열하면 된다.

 

ex :

struct student
{
	int number;
	char name[10];
	double grade;
};

struct student s1 = {24, "Kim", 4.3};

 

해석

첫 번째 문장은 구조체 student를 정의했고

 

두 번째 문장은 구조체 student의 변수를 선언한다.

 

구조체 정의와 변수 선언 모두 세미콜론으로 끝난다.

 

참고로 구조체 선언은 한 번이지만 구조체 변수는 여러 개를 만들 수 있다.

 

쉽게 말해서 구조체 선언은 새로운 자료형을 만드는 것이고,

 

그 새로운 자료형을 이용해서 변수를 만드는 것이다.

 

단 앞에 struct만 추가로 붙여줌으로써 구조체 변수라는 걸 의미하는 것이다.

 

이제 구조체의 선언과 변수 선언을 동시에 하는 경우 초기화하는 방법을 알아보자

 

ex :

struct student
{
	int number;
	char name[10];
	double grade;
} s1 = {24, "Kim", 4.3};

해석

 

구조체를 선언하고 멤버를 정의하며 구조체 변수를 선언과 동시에 초기화까지 하는 예이다.

반응형

+ Recent posts