본문 바로가기
Category/정보처리기사

C언어에서 구조체의 멤버에 접근하는 방법

by Corinee 2024. 10. 9.
728x90
반응형

C언어에서 구조체는 여러 데이터를 하나의 단위로 묶는 방법입니다. 구조체에 접근하는 방법에는 두 가지가 있습니다: 일반 구조체 변수를 통해 접근하는 방법과, 구조체 포인터를 통해 접근하는 방법입니다.

1. 일반 구조체 변수로 멤버에 접근

  • 구조체 변수가 일반 변수일 경우, 점 연산자(.)를 사용해 구조체의 멤버에 접근합니다.

예시:

#include <stdio.h>

typedef struct Data {
    char c;
    int num;
} Data;

int main() {
    Data d;  // 일반 구조체 변수 선언
    d.num = 10;  // 점(.) 연산자를 사용해 멤버에 접근
    
    printf("%d\n", d.num);  // 10 출력
    return 0;
}
  • d.num: 구조체 변수 d의 num 멤버에 점(.) 연산자로 접근합니다.

2. 구조체 포인터로 멤버에 접근

  • 구조체 변수가 포인터일 경우, 화살표 연산자(->)를 사용해 구조체의 멤버에 접근합니다.
  • 구조체 포인터는 구조체의 메모리 주소를 가리키며, 포인터를 통해 구조체 멤버를 접근할 때 -> 연산자를 사용합니다.

예시:

#include <stdio.h>
#include <stdlib.h>

typedef struct Data {
    char c;
    int *numPtr;
} Data;

int main() {
    int num = 10;
    Data *d2 = malloc(sizeof(Data));  // 구조체 포인터 동적 할당
    
    d2->numPtr = &num;  // 화살표(->) 연산자를 사용해 멤버에 접근
    
    printf("%d\n", *d2->numPtr);  // 10 출력
    free(d2);  // 동적 할당 메모리 해제
    return 0;
}
  • d2->numPtr: 구조체 포인터 d2가 가리키는 구조체의 numPtr 멤버에 화살표(->) 연산자로 접근합니다.

연산자의 차이:

  • 점 연산자(.): 일반 구조체 변수에 대해 멤버에 접근할 때 사용합니다.
  • 화살표 연산자(->): 구조체 포인터에 대해 멤버에 접근할 때 사용합니다.

구조체 멤버 접근 요약:

  1. 일반 구조체 변수:
    • 멤버 접근 시 점 연산자(.) 사용.
    • 예: d.num
  2. 구조체 포인터:
    • 멤버 접근 시 화살표 연산자(->) 사용.
    • 예: d2->numPtr

예제 정리:

#include <stdio.h>
#include <stdlib.h>

typedef struct Data {
    char c;
    int *numPtr;
} Data;

int main() {
    int num = 10;
    
    Data d1;            // 일반 구조체 변수
    Data *d2 = malloc(sizeof(Data));  // 구조체 포인터 동적 할당
    
    d1.numPtr = &num;  // 점(.) 연산자로 멤버 접근
    d2->numPtr = &num;  // 화살표(->) 연산자로 멤버 접근
    
    printf("%d\n", *d1.numPtr);  // 10 출력
    printf("%d\n", *d2->numPtr);  // 10 출력
    
    free(d2);  // 동적 메모리 해제
    return 0;
}

출력 결과:

 
10
10

요약:

  • 점(.): 일반 구조체 변수를 통해 멤버에 접근할 때 사용.
  • 화살표(->): 구조체 포인터를 통해 멤버에 접근할 때 사용.