inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2027 대비!) 일주일만에 합격하는 정보처리기사 실기

포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터)

포인터

해결된 질문

151

dlawltn52

작성한 질문수 3

0

**a = &b 와 *a = b 가 같은 말이라고 생각해도 되나요?

python java c 정보처리기사

답변 2

0

주말코딩

안녕하세요, 우선 b가 배열인지 아니면 원시 자료형인지에 따라 달라집니다.

(배열의 이름은 그 자체로 주소를 표현하기 때문에 달라질 수 있습니다.)

 

단순히 2가지만 비교하자면 같은 표현은 아닙니다.

 

*a = b

이 코드는 a가 가리키는 위치에 b 값을 저장한다는 뜻입니다.

int b = 10;
int x;
int *a = &x;

*a = b;

 

**a = &b

이건 이중 포인터 상황입니다.

int b = 10;

int x;
int *p = &x;
int **a = &p;

**a = b;

 

대략적으로 설명드리자면,

*a = b a가 가리키는 곳에 b 저장

**a = b a가 가리키는 포인터가 가리키는 곳에 b 저장

*a = &b a가 가리키는 곳에 b의 주소 저장

**a = &b 타입이 맞지 않아 보통 오류

 

이렇게 됩니다.

0

dlawltn52

13:55에서 *ptr_b = str2 부분에서 ptr_a의 값이 바뀐다고 되어 있는데 이거는 다른 상황이라고 이해하면 되나요?

0

주말코딩

ptr_b는 이중포인터입니다.

그 이야기는 정의한 다음에 별표 하나만 쓰면, 주소를 가리킬 수 있다는 의미입니다.

(포인터에 대한 포인터이기 때문입니다.)

str2도 배열 이름이기 때문에 주소를 가리킵니다.

그래서 ptr_b의 값에(포인터) 배열의 이름을 넣은 것입니다.

 

그것이 곧 ptr_a의 주소이죠. 왜냐하면 현재 ptr_b는 ptr_a의 주소가 들어가있는데,

ptr_a 포인터 주소의 값은 ptr_a가 가리키고 있는 곳이기 때문입니다.

(헷갈리시겠지만 아래에 별도로 그려보겠습니다.)

그곳에 str2를 넣으면 ptr_a는 곧 그 배열의 시작주소를 가리키게 됩니다.

 


아래 도표를 살펴봅시다.

주소와 값은 항상 공부하실 때 박스를 그려놓고 위 아래를 나눠서 그린 후,

각각 따로 작성하면서 따라가시는 것이 좋습니다.

 

주소와 값을 아래처럼 생각해봅시다.

주소      값
1001      'H'
1002      'e'
1003      'l'
1004      'l'
1005      'o'
1006      '\0'

 

포인터의 관계는 이렇습니다.

str
 │
 ▼
1001 ── 'H'
1002 ── 'e'
1003 ── 'l'
1004 ── 'l'
1005 ── 'o'
1006 ── '\0'


ptr_a
 │
 ▼
1001  (str을 가리킴)


ptr_b
 │
 ▼
ptr_a 의 주소

ptr_b → ptr_a → str → "Hello"

 

단계별로 해석하면 이렇게 됩니다.

ptr_b → ptr_a

*ptr_b → ptr_a

(*ptr_b + 1) → 'e'

 

그래서 ptr_b가 ptr_a를 바꾸는 과정은

ptr_b → ptr_a → "Hello" 이렇게 되어있던 것이

ptr_b → ptr_a → "World" 이렇게 바뀝니다.

ptr_a가 가리키고 있는 대상이 바뀐다는 의미입니다.

 

변경 후 메모리 구조는

str      → "Hello"
str2     → "World"

ptr_a → str2
ptr_b → ptr_a

이렇게 됩니다.

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. dlawltn52님.

a = &b와 *a = b는 C언어에서 포인터와 관련된 다른 개념을 나타내는 것으로, 두 문장은 의미가 다릅니다. 각각을 설명드리겠습니다.

  1. a = &b:

    • a는 포인터 변수로, b의 주소값을 저장하게 됩니다. 즉, a는 이제 b의 메모리 주소를 가리키게 됩니다.
    • 이를 통해 a를 통해 b의 값을 간접 참조할 수 있게 됩니다.
  2. *a = b:

    • a는 포인터 변수로, 이미 특정한 메모리 주소를 가리키고 있어야 합니다.
    • *a는 a가 가리키는 주소에 저장된 값을 의미하며, 이를 b로 변경하는 역할을 합니다. 즉, b의 값을 변수 또는 메모리 주소에 저장(copied)하게 되는 것입니다.

결론적으로, a = &b는 포인터 a가 b의 주소를 가리키도록 설정하는 반면, *a = b는 포인터 a가 가리키고 있는 위치에 b 값을 저장하는 것입니다. 따라서 두 표현은 다르게 동작하며, 서로 같은 의미로 보시면 안 됩니다.

이와 관련된 포인터의 동작과 사용법에 대한 더 많은 정보를 원하시면, 아래의 유사 질문들을 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

정처기 2026-3 실기 문의

0

52

2

정처기 실기 3회 컴싸 사용 여부

0

34

1

모의고사 1 회 2번문제 중

0

44

2

26-2 이론문제 재탕

1

35

1

26-2년도 코드문제

0

23

0

26-2 코드문제

0

27

1

15분 48초 질문

0

37

2

26-1년도 이론문제 재탕

0

52

1

26-1년도 코드문제 재탕

0

36

0

이론재탕만 눈치챘어도

0

61

1

25-3년도 이론문제 재탕

0

49

1

25-3년도 코드문제 재탕

0

37

0

출력값 문의

0

38

2

25-2 분기커버리지

0

42

0

25-2 이론 재탕

0

54

1

25-1 이론 재탕

0

42

1

서브넷 마스크

0

48

2

모의고사 1회 계산문제 2개 맞았는데

0

64

2

업캐스팅 문제 예시 4번 부모 호출

0

48

2

모의고사 자료 해설이 너무 불친절하네요.

0

93

2

부모의 생성자 출력 관련

0

42

2

24-3 이론파트 재탕문제

0

55

0

누락코드

0

44

1

다차원 배열 포인터 질문있습니다

0

62

3