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

2024. 10. 9. 13:01·Category/정보처리기사
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

요약:

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

'Category > 정보처리기사' 카테고리의 다른 글

서버 접근 통제 유형 DAC(임의 접근 통제), MAC(강제 접근 통제), RBAC(역할 기반 접근 통제) 알아보기  (1) 2024.10.09
C 언어 구조체(Structure)란?  (1) 2024.10.09
RIP(Routing Information Protocol) 거리 벡터 라우팅 프로토콜 알아보기  (1) 2024.10.09
클라우드 컴퓨팅 서비스 모델(PaaS, SaaS, IaaS)이란?  (0) 2024.10.09
완전수(Perfect Number)란? 6, 28, 496, 8128, ...  (0) 2024.10.08
'Category/정보처리기사' 카테고리의 다른 글
  • 서버 접근 통제 유형 DAC(임의 접근 통제), MAC(강제 접근 통제), RBAC(역할 기반 접근 통제) 알아보기
  • C 언어 구조체(Structure)란?
  • RIP(Routing Information Protocol) 거리 벡터 라우팅 프로토콜 알아보기
  • 클라우드 컴퓨팅 서비스 모델(PaaS, SaaS, IaaS)이란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (361) N
      • Category (354)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (22)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (80)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
      • Archive (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    mcp server
    원시값(primitive)
    ajax (asynchronous javascript and xml)
    styled-components
    Collections
    useEffect
    mermaid-cli
    chrome extension 자동 배포
    시맨틱 버전(semantic versioning
    중첩 함수(nested function)
    public vs assets
    stdlib.h
    react
    structuredclone()
    jackson 라이브러리
    Jest
    소프트웨어 버전 관리
    쉽게 풀어쓴 C언어 Express
    semver)
    x.y.z (메이저.마이너.패치)
    core web vitals
    counter
    프로세스 강제 종료
    react router
    defaultdict
    json.parse(json.stringify())
    intellij 콘솔 한글 깨짐
    named export vs default export
    inp
    math.h
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
C언어에서 구조체의 멤버에 접근하는 방법
상단으로

티스토리툴바