728x90
(1) 구조체 배열 선언
사용자 정의 타입인 구조체도 배열의 한 요소가 될 수 있다.
struct student highschool[3] = {
{"김철수", 1, 7},
{"박짱구", 3, 2},
{"맹구글", 2, 1}
};
puts("전학생들의 이름은 다음과 같습니다.");
printf("%s, %s, %s", highschool[0].name, highschool[1].name, highschool[2].name);
위와 같이 멤버 연산자 .을 사용하여 각 배열 요소의 멤버 변수에 접근할 수 있다.
이는 이차원 배열에도 동일하게 사용 가능하다.
(2) 구조체를 가리키는 포인터
// 문법
struct 구조체이름* 구조체포인터이름;
// 예시
struct student* ptr_student;
배열의 경우와는 달리 구조체의 이름은 구조체를 가리키는 주소가 아니다.
따라서 포인터를 할당할 때에는 반드시 주소 연산자 &을 사용해야 한다.
구조체 포인터를 이용하여 구조체의 멤버에 접근하는 방법은 두 가지가 있다.
- 참조 연산자 *를 이용하는 방법
- 화살표 연산자 ->를 이용하는 방법
참조 연산자는 다음과 같이 사용한다.
// 문법
(*구조체 포인터).멤버변수이름
// 예시
(*ptr_student).name
참조 연산자 *는 멤버 연산자 .보다 연산자 우선순위가 낮으므로 반드시 괄호()를 사용해야 한다.
화살표 연산자는 앞에는 구조체 포인터, 뒤에는 접근하고자 하는 구조체의 멤버 변수 이름을 사용한다.
// 문법
구조체 포인터 -> 멤버변수 이름
// 예시
ptr_student -> name
위와 같이 두 가지 방법은 완전히 같은 동작을 하며, 일반적으로 화살표 연산자를 더 사용한다.
struct student highshcool = {"김철수", 1, 7};
struct student* ptr_student; // 구조체 포인터 선언
// 구조체 포인터에 student 구조체인 highschool의 주소를 할당
ptr_student = &highschool;
strcpy((*ptr_student).name, "맹구글"); // 참조 연산자 *를 이용하는 방법
strcpy(ptr_student->grade, 2); // 화살표 연산자->를 이용하는 방법
// 구조체 변수를 이용해 직접 수정
highschool.class = 2;
// class는 C++에서 추가된 예약어이기에, 변수명으로 사용하였다.
🍉 참고
반응형
'Language > C' 카테고리의 다른 글
[C언어] 인수 전달 방법 (0) | 2024.04.16 |
---|---|
[C언어] 포인터의 연산 (0) | 2024.04.16 |
[C언어] 구조체 (2) | 2024.04.15 |
[C언어] 자료형 (1) | 2024.04.15 |
[C언어] 포인터 (0) | 2024.04.14 |