강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của dlawltn522465
dlawltn522465

câu hỏi đã được viết

(2026) Đỗ kỳ thi Kỹ sư Xử lý Thông tin phần thực hành chỉ trong một tuần

Thao tác con trỏ và dạng đề thi (2. Tăng/giảm con trỏ, con trỏ cấp hai)

포인터

Đã giải quyết

Viết

·

47

0

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

pythonjavac정보처리기사

Câu trả lời 2

0

weekendcode님의 프로필 이미지
weekendcode
Người chia sẻ kiến thức

안녕하세요, 우선 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
Người đặt câu hỏi

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

weekendcode님의 프로필 이미지
weekendcode
Người chia sẻ kiến thức

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 값을 저장하는 것입니다. 따라서 두 표현은 다르게 동작하며, 서로 같은 의미로 보시면 안 됩니다.

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

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

Hình ảnh hồ sơ của dlawltn522465
dlawltn522465

câu hỏi đã được viết

Đặt câu hỏi