[C언어 스터디 - 04] 구조체 (struct)
2020. 6. 24. 11:00ㆍ03. Resources/C, C++
728x90
반응형
구조체 사용하기
참고 문헌 (ch48) : https://dojang.io/mod/page/view.php?id=407
구조체를 만들고 사용하기
구조체 정의 : struct 이용
struct 구조체이름{
자료형 멤버이름;
};
구조체 선언 : struct (구조체이름) (변수이름);
예시
#include <stdio.h>
#include <string.h> // strcpy 함수가 선언된 헤더 파일
struct Person { // 구조체 정의
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
char address[100]; // 구조체 멤버 3
};
int main()
{
struct Person p1; // 구조체 변수 선언
// 점으로 구조체 멤버에 접근하여 값 할당
strcpy(p1.name, "홍길동");
p1.age = 30;
strcpy(p1.address, "서울시 용산구 한남동");
// 점으로 구조체 멤버에 접근하여 값 출력
printf("이름: %s\n", p1.name); // 이름: 홍길동
printf("나이: %d\n", p1.age); // 나이: 30
printf("주소: %s\n", p1.address); // 주소: 서울시 용산구 한남동
return 0;
}
구조체의 정의와 선언을 동시에 하는 방법
struct 구조체이름 {
자료형 멤버이름;
} 변수;
예시
#include <stdio.h>
#include <string.h> // strcpy 함수가 선언된 헤더 파일
struct Person { // 구조체 정의
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
char address[100]; // 구조체 멤버 3
} p1; // 구조체를 정의하는 동시에 변수 p1 선언
int main()
{
// 점으로 구조체 멤버에 접근하여 값 할당
strcpy(p1.name, "홍길동");
p1.age = 30;
strcpy(p1.address, "서울시 용산구 한남동");
// 점으로 구조체 멤버에 접근하여 값 출력
printf("이름: %s\n", p1.name); // 이름: 홍길동
printf("나이: %d\n", p1.age); // 나이: 30
printf("주소: %s\n", p1.address); // 주소: 서울시 용산구 한남동
return 0;
}
typedef로 struct 키워드 없이 구조체 선언하기
struct 키워드를 생략하고 선언하는 방법: typedef로 정의하면서 별칭(alias)을 정해주기
typedef struct 구조체이름 {
자료형 멤버이름;
} 구조체별칭;
typedef로 정의한 변수 선언하는 방법: (구조체 별칭) (변수 이름);
#include <stdio.h>
#include <string.h> // strcpy 함수가 선언된 헤더 파일
typedef struct _Person { // 구조체 이름은 _Person
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
char address[100]; // 구조체 멤버 3
} Person; // typedef를 사용하여 구조체 별칭을 Person으로 정의
int main()
{
Person p1; // 구조체 별칭 Person으로 변수 선언
// 점으로 구조체 멤버에 접근하여 값 할당
strcpy(p1.name, "홍길동");
p1.age = 30;
strcpy(p1.address, "서울시 용산구 한남동");
// 점으로 구조체 멤버에 접근하여 값 출력
printf("이름: %s\n", p1.name); // 이름: 홍길동
printf("나이: %d\n", p1.age); // 나이: 30
printf("주소: %s\n", p1.address); // 주소: 서울시 용산구 한남동
return 0;
}
또한 모든 자료형의 별칭을 설정할 수도 있음
typedef int MYINT; // int를 별칭 MYINT로 정의
typedef int* PMYINT; // int 포인터를 별칭 PMYINT로 정의
MYINT num1; // MYINT로 변수 선언
PMYINT numPtr1; // PMYINT로 포인터 변수 선언
numPtr1 = &num1; // 포인터에 변수의 주소 저장
// 사용 방법은 일반 변수, 포인터와 같음
익명 구조체 사용하기
익명 구조체 정의하기: 구조체를 정의할 때 구조체의 이름 없이 별칭만을 이용해서 정의하는 구조체, 이 경우 별칭을 무조건 정해줘야한다.
typedef struct {
자료형 멤버이름;
} 구조체별칭;
익명 구조체 선언하기: (구조체 별칭) (변수 이름);
예시
#include <stdio.h>
#include <string.h> // strcpy 함수가 선언된 헤더 파일
typedef struct { // 구조체 이름이 없는 익명 구조체
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
char address[100]; // 구조체 멤버 3
} Person; // typedef를 사용하여 구조체 별칭을 Person으로 정의
int main()
{
Person p1; // 구조체 별칭 Person으로 변수 선언
// 점으로 구조체 멤버에 접근하여 값 할당
strcpy(p1.name, "홍길동");
p1.age = 30;
strcpy(p1.address, "서울시 용산구 한남동");
// 점으로 구조체 멤버에 접근하여 값 출력
printf("이름: %s\n", p1.name); // 이름: 홍길동
printf("나이: %d\n", p1.age); // 나이: 30
printf("주소: %s\n", p1.address); // 주소: 서울시 용산구 한남동
return 0;
}
반응형
'03. Resources > C, C++' 카테고리의 다른 글
[C언어 스터디 - 06] 구조체 멤버값 설정 (memset) (0) | 2020.06.26 |
---|---|
[C언어 스터디 - 05] 구조체와 포인터 (struct and pointer) (0) | 2020.06.25 |
[C언어 스터디 - 03] 배열과 포인터 (array and pointer) (0) | 2020.06.23 |
[C언어 스터디 - 02] 2차원 배열 (2D Array) (0) | 2020.06.22 |
[C언어 스터디 - 01] 1차원 배열 (1D Array) (0) | 2020.06.21 |