강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

dlawltn52님의 프로필 이미지
dlawltn52

작성한 질문수

(2026) 일주일만에 합격하는 정보처리기사 실기

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

포인터

해결된 질문

작성

·

47

0

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

답변 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 타입이 맞지 않아 보통 오류

 

이렇게 됩니다.

dlawltn52님의 프로필 이미지
dlawltn52
질문자

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

주말코딩님의 프로필 이미지
주말코딩
지식공유자

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 인턴입니다. dlawltn52님.

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

  1. a = &b:

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

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

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

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

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

dlawltn52님의 프로필 이미지
dlawltn52

작성한 질문수

질문하기