2022. 3. 9. 23:53ㆍC
구조체란?
다른 자료형들을 하나로 묶어 사용할 수 있게 해주는 것! 변수를 모아둔 박스라고 생각하면 편하다
개인적으로 자바의 객체와 비슷한 것 같다.
struct Person {
char name[10];
char id[20];
int age;
};
int main() {
struct Person person[10];
}
이렇게
struct 구조체이름 {
자료형 멤버변수이름1;
자료형 멤버변수이름2;
...
};
이 형식으로 사용하며 중괄호 안에 선언한 변수들을 멤버라고 칭한다.
구조체이름 뒤에 변수까지 사용 해주며 변수명.멤버 형식으로 사용 가능하다
struct Person {
char name[10];
char id[20];
int age;
};
int main() {
struct Person person;
printf("이름 : ");
scanf("%s", person.name);
printf("ID : ");
scanf("%s", person.id);
printf("나이 : ");
scanf("%d", &person.age);
printf("%s씨는 %d살이며 학번은 %s 입니다", person.name, person.age, person.id);
return 0;
}
출력 결과
이름 : inho
ID : 0001025
나이 : 23
inho씨는 23살이며 학번은 0001025 입니다
또 struct가 아닌 좀 더 간단한 방법이 있는데 typedef struct를 사용할 수 있다.
typedef struct 구조체이름 {
자료형 멤버변수이름1;
자료형 멤버변수이름2;
} 구조체 별칭;
형식으로 사용하는데
구조체 변수를 선언할 때 매번 struct를 쓰지 않기 위해 typedef로 별칭을 꼭 지정해줘야한다.
*구조체 이름과 구조체별칭은 같아도 되지만 보통 구조체이름은 "_구조체별칭"으로 사용한다고 한다.
구조체 변수는
구조체별칭 변수이름 = {변수값1, 변수값2, ....);
로 선언할 수 있다.
아까 예제를 typedef를 이용해 다시 작성해보면
typedef struct _Person {
char name[10];
char id[20];
int age;
} Person;
int main() {
Person person;
printf("이름 : ");
scanf("%s", person.name);
printf("ID : ");
scanf("%s", person.id);
printf("나이 : ");
scanf("%d", &person.age);
printf("%s씨는 %d살이며 학번은 %s 입니다", person.name, person.age, person.id);
return 0;
}
출력 결과
이름 : inho
ID : 002013
나이 : 23
inho씨는 23살이며 학번은 002013 입니다
똑같은 결과가 출력 되는 것을 확인할 수 있다.
구조체 변수의 멤버에 값을 대입하고, 출력하는 프로그램이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
struct college {
char name[10];
int age;
char address[20];
float height;
} student1, student2;
strcpy(student1.name, "Kim");
student1.age = 22;
strcpy(student1.address,"Seoul");
student1.height = 173.5;
strcpy(student2.name,"Choi");
student2.age = 23;
strcpy(student2.address,"Anyang");
student2.height = 176.7;
printf("student1 : %s %d ", student1.name, student1.age);
printf("%s %.1f \n", student1.address, student1.height);
printf("student2 : %s %d ", student2.name, student2.age);
printf("%s %.1f \n", student2.address, student2.height);
}
출력 결과
student1 : Kim 22 Seoul 173.5
student2 : Choi 23 Anyang 176.7
역시 자바의 객체와 비슷한것 같다.
구조체를 통해서 복잡하게 여러개의 변수를 선언할 필요 없이 간단히 표현할 수 있다는건 참 좋은것 같다.
구조체 변수의 초기화를 통해 얻은 3명의 수학, 영어 성적의 합과 평균을 구하는 프로그램
typedef를 이용했다.
int main() {
typedef struct _grade{
int math;
int eng;
} grade;
grade s1 = {89, 93}, s2 = {75, 88}, s3 = {82,92};
int sum;
float aver;
sum = s1.math + s2.math + s3.math;
aver = sum / 3.0;
printf("수학 : 합 = %d 평균 = %.2f \n", sum, aver);
sum = s1.eng + s2.eng + s3.eng;
aver = sum / 3.0;
printf("영어 : 합 = %d 평균 = %.2f \n", sum, aver);
}
출력 결과
수학 : 합 = 246 평균 = 82.00
영어 : 합 = 273 평균 = 91.00
구조체 변수를 이용하여 구조체 멤버 전체를 복사하여 출력하는 프로그램
int main() {
typedef struct _person{
char name[10];
int num;
int age;
}person;
person choi = {"choi", 7, 22};
person kim;
kim = choi;
printf("kim.name --- %s \nkim.num --- %d \nkim.age --- %d", kim.name, kim.num, kim.age);
}
출력 결과
kim.name --- choi
kim.num --- 7
kim.age --- 22
구조체를 이용한 복사가 가능하다는 결과를 확인할 수 있다.
'C' 카테고리의 다른 글
C - 문자 입출력 라이브러리 (0) | 2022.03.10 |
---|---|
C - 문자와 문자열 (0) | 2022.03.10 |
C - 이중 포인터 (0) | 2022.03.09 |
C - 자동변수와 정적변수 (0) | 2022.03.08 |
C - 재귀함수 (0) | 2022.03.07 |