구조체(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};
해석
구조체를 선언하고 멤버를 정의하며 구조체 변수를 선언과 동시에 초기화까지 하는 예이다.
'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글
구조체(3-2) 구조체 선언 및 구조체 변수 정의 그리고 구조체 멤버에 값 대입 및 멤버의 값 참조 (0) | 2021.02.06 |
---|---|
구조체(3) 구조체 멤버 참조와 예제들 (0) | 2021.02.06 |
구조체의 정의, 선언, 초기화, 사용방법 (0) | 2021.02.06 |
문자열(2) 표준 입출력 함수들 (0) | 2021.02.06 |
문자열(1) 문자열 상수와 포인터 변수 (0) | 2021.02.06 |