정처기 감자
C언어구조체

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 구조체 포인터

코딩C언어
읽는데 6분 소요
처음 쓰여진 날: 2026-03-19
마지막 수정일: 2026-04-24
조회수: —
선수학습(2개)
  • C언어 포인터의 기초
  • C언어 구조체

요약

C언어 구조체 포인터의 개념과 화살표 연산자(->), 함수에서 구조체 포인터를 매개변수로 전달하여 원본을 수정하는 패턴을 알아봅니다. 정보처리기사 실기에 자주 출제되는 구조체 포인터 활용법을 정리합니다.

아래에서 하나씩 배울 내용을 미리 정리한 표입니다.

개념설명예시
구조체 포인터 선언구조체 변수의 주소를 저장하는 포인터struct Student *p = &s1;
화살표(->) 연산자구조체 포인터로 멤버에 접근p->id
(*p).멤버와 동일-> 없이 역참조 후 멤버 접근(*p).id
-> 체인연결된 구조체를 따라가며 접근head->n2->n1
함수에 구조체 포인터 전달함수에서 원본 구조체를 직접 수정init(&ba, ...)

구조체 포인터란? 기초

포인터는 변수의 주소를 저장하는 변수입니다. 구조체 포인터는 구조체 변수의 주소를 저장하는 포인터입니다.

c
코드 하이라이팅 중…

일반 포인터와 선언 방식이 같습니다. 자료형 뒤에 *를 붙이면 포인터가 됩니다.

일반 포인터구조체 포인터
int *p = &a;struct Student *p = &s1;
int 변수의 주소 저장struct Student 변수의 주소 저장

일반 포인터는 *p로 값에 접근하지만, 구조체 포인터는 멤버가 여러 개이기 때문에 어떤 멤버에 접근할지 지정해야 합니다. 이때 사용하는 것이 아래에서 배울 화살표(->) 연산자입니다.


화살표(->) 연산자 기초

구조체의 포인터로 멤버에 접근할 때는 화살표(->) 연산자를 사용합니다.

c
코드 하이라이팅 중…
구조체 포인터
포인터 p가 구조체 s1을 가리킵니다. p->id로 멤버에 접근할 수 있어요.

화살표 연산자: 주소로 이해하기

구조체 s1이 주소 100에 있고, 포인터 p가 주소 1000에 있다고 가정해 봅시다.

구조체 포인터 메모리 다이어그램
p(주소 1000)에 s1의 주소 100이 저장되어 있습니다. p->id는 주소 100으로 가서 id 멤버에 접근합니다.
text
코드 하이라이팅 중…

p->id는 (*p).id와 동일한 의미입니다. *p는 "p가 가리키는 곳의 값", 즉 구조체 s1 자체를 뜻합니다. (*p).id에서 괄호가 필요한 이유는 .이 *보다 우선순위가 높아서, 괄호 없이 *p.id로 쓰면 *(p.id)로 해석되기 때문입니다.

시험에서는 -> 연산자만 사용됩니다
(*p).id처럼 쓰는 문제는 거의 출제되지 않습니다. p->멤버 형태에 익숙해지세요.

단계별로 풀어서 해석하기

->가 연속으로 이어지면 왼쪽부터 한 단계씩 풀어서 해석합니다.

c
코드 하이라이팅 중…
c
코드 하이라이팅 중…

주소로 이해하기

각 노드에 임의 주소를 부여하면 -> 체인을 더 명확하게 추적할 수 있습니다.

구조체 포인터 체인 메모리 다이어그램
head(주소 1000)가 a(주소 100)를 가리키고, 각 노드의 n2가 다음 노드의 주소를 저장합니다.
text
코드 하이라이팅 중…

이 방식은 -> 체인이 길어질수록 유용합니다. 자세한 내용과 3단 이상 예시는 연결 리스트 - 단계별로 풀어서 해석하기를 참고하세요.


함수에서 구조체 포인터 사용 심화

구조체 포인터를 함수의 매개변수로 전달하면, 함수 내에서 원본 구조체의 값을 직접 수정할 수 있습니다. 이 패턴은 시험에 자주 출제됩니다.

아래 코드에서 typedef를 사용하여 struct 키워드 없이 Acc만으로 타입을 사용하고 있습니다.

c
코드 하이라이팅 중…
호출 방식설명
init(&ba, ...)ba의 주소를 전달
a->acc = x포인터로 원본 멤버에 접근하여 수정
함수 호출 시 &를 빠뜨리면 안 됩니다
init(ba, ...)가 아니라 init(&ba, ...)로 주소를 전달해야 합니다. &를 빠뜨리면 구조체 값이 복사되어 원본이 수정되지 않습니다.

함수 호출: 주소로 이해하기

init(&ba, 9981, 2200.0) 호출 시, ba의 주소가 포인터 a에 복사됩니다.

구조체 포인터 함수 전달 메모리 다이어그램
init 함수의 포인터 a(주소 1000)에 ba의 주소 100이 저장됩니다. a->acc는 주소 100으로 가서 acc를 수정합니다.
text
코드 하이라이팅 중…

a가 ba의 주소를 갖고 있기 때문에, a->acc = x는 main의 ba.acc를 직접 수정하는 것과 같습니다.

구조체를 값으로 전달하는 방식과 포인터로 전달하는 방식의 차이는 Call by Value vs Call by Reference에서 자세히 다룹니다.


정보처리기사 실기 대비 문제

메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(4개)
  • C언어 중첩 구조체와 포인터 접근
  • C언어 연결 리스트 (Linked List)
  • C언어 이진 트리 (Binary Tree)
  • C언어 연결 리스트 뒤집기 (Reverse Linked List)

추천 개념

Beta

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999