배열은 자료형이 같은 데이터를 묶어서 사용할 수 있습니다.
자료형이 다른 데이터를 묶기 위해서는 배열을 사용할 수 없습니다.
이때 구조체를 사용해서 자료형이 다른 데이터들도 묶어서 사용할 수 있습니다.
구조체는 struct 키워드를 사용합니다.
기본 형식은
struct 구조체 이름
{
//멤버
자료형 이름;
자료형 이름;
자료형 이름;
자료형 이름;
.
.
.
};
구조체 내부의 선언된 변수들을 멤버라고 합니다.구조체 선언이 끝나고 마지막에 ;(세미콜론)을 꼭 붙어야 합니다.
구조체를 작성해보면서 다양한 선언 방식을 알아보겠습니다.
#include <stdio.h>
struct student {
char name[20];
int age;
float grade;
};
int main(void) {
struct student st1 ={ "홍길동", 20, 40.5 };
return 0;
}
구조체를 사용하기 위해서는 구조체의 변수를 선언해야 합니다.함수 내부에 선언하면 지역변수가 되기 때문에 초기화를 해야 합니다.
전역 변수로도 선언이 가능합니다.
#include <stdio.h>
struct student {
char name[20];
int age;
float grade;
};
struct student st1 = { "홍길동", 20, 40.5 };
구조체의 이름을 선언하지 않고 하는 방법도 있습니다.
대신 이때는 구조체를 정의할 때 변수도 같이 선언해야 합니다.
struct student{
char name[20];
int age;
float grade;
}st1, st2, st3;
// 구조체의 이름없이 정의 가능
struct {
char name[20];
int age;
float grade;
}st1, st2, st3;
단점은 나중에 지역 변수 또는 선언한 변수보다 더 많이 변수가 필요해지면 추가로 선언할 수가 없습니다.
새롭게 구조체를 정의하거나 추가로 구조체 변수를 선언해야 합니다.
구조체의 정의와 변수를 따로 선언하는 경우에는
구조체 변수를 선언하면서 초기화를 할 수 있습니다.
struct student st1 = { "홍길동", 20, 40.5 };
구조체의 멤버는.(멤버 연산자)를 이용해서 사용할 수 있습니다.
구조체에 값을 대입해서 사용할 수 있습니다.
printf("이름 : %s \n", st1.name);
printf("나이 : %d \n", st1.age);
printf("성적 : %f \n", st1.grade);
구조체에 값을 대입할 수도 있습니다.
st1.age = 20;
st1.grade = 40.5;
단 문자열은 조금 다릅니다. 일반 변수에 대입이랑 같게 하면 에러가 발생합니다.
st1.name = "홍길동"; //에러 발생
문자열은 strcpy()를 사용해 대입합니다.
strcpy()을 사용하기 위해서는 #include <string.h>를 선언해야 합니다.
strcpy(st1.name, "홍길동");
구조체도 배열을 선언할 수 있습니다.
struct student st1[40];
struct student st2[2]={
{철수, 20, 40.5},
{영희, 20, 60}
};
strcpy(st2[0].name, "홍길동");
구조체도 포인터로 선언이 가능합니다.
struct student st1 = { "홍길동", 20, 40.5 };
struct student* st2;
st2 = &st1;
printf("이름 : %s \n", st2->name); //printf("이름 : %s \n", (*st2).name); 도 가능
printf("나이 : %d \n", st2->age);
printf("성적 : %f \n", st2->grade);
->는 포인터에 대입된 변수에 접근하기 위한 연산자입니다.
구조체는 함수의 반환형, 매개변수로 사용 가능합니다.
#include <stdio.h>
#include <string.h>
struct student {
char name[20];
int age;
float grade;
};
struct student list(struct student a) {
struct student st;
strcpy(st.name, "영희");
st.age = a.age;
st.grade = 56.5;
return st;
}
int main(void) {
struct student st1 = { "철수",20,65.4 };
struct student st2;
st2 = list(st1);
printf("이름 : %s \n", st2.name);
printf("나이 : %d \n", st2.age);
printf("성적 : %f \n", st2.grade);
return 0;
}
함수의 반환형으로 사용할 때 struct 구조체 이름 + 함수 이름 앞에 선언돼야 합니다.
매개변수로 사용할 때도 같습니다. struct 구조체 이름 + 매개변수 이름을 적어야 합니다.
'공부 자료실 > C언어' 카테고리의 다른 글
C언어 - 문자열과 포인터 (0) | 2020.06.29 |
---|---|
C언어 - 문자열 (0) | 2020.06.29 |
C언어 - 배열 (0) | 2020.06.23 |
C언어 - 변수의 생존기간과 저장 유형 지정자 (0) | 2020.06.22 |
C언어 - 지역변수, 전역변수 (0) | 2020.06.22 |
댓글