강의

멘토링

커뮤니티

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

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

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

Biến tĩnh, Phương thức tĩnh (static) v2

번외 질문

Đã giải quyết

Viết

·

28

0

  • 선생님 c언어에서 포인터가 2개로 되면 어떻게 되는건가요?? 혹시 예시를 받아볼수 있을까요???

  • int a[3][2]={{1,2}, {3,4}, {5,6}}
    int *p=a[1]; 라고 되어있고
    printf를 할 때*a와 **a의 차이가 있을까요?

pythonjavac정보처리기사

Câu trả lời 2

0

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

안녕하세요, 가현님!

주신 문장으로만은 질문이 조금 이해가 어렵습니다.

 

그래서 다시 질문드립니다. 

int a[3][2]={{1,2}, {3,4}, {5,6}}
int *p=a[1]; 라고 되어있고
printf를 할 때 *a와 **a의 차이가 있을까요?

여기서 printf에 들어가는 변수 부분 안에 *a, **a 가 들어가면 어떻게 되는지를 물어보시는 걸까요?

 

제 영상 중 어느 부분에서 질문이 생겼는지도 함께 주시면 답변에 큰 도움이 됩니다.

rkgus88075님의 프로필 이미지
rkgus88075
Người đặt câu hỏi

선생님 강의에서 나온게 아니라 ㅜㅜ 어디선가 스쳐가듯 봤던 기억이 나서요
**를 두개 쓰면 한번 쓰면 어떤 차이점이 있는지 궁금한거에요.. 단지 1개와 2개의 차이

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

아! 그렇군요.

별표 2개**는 포인터를 다시 가리키는 포인터입니다.

 

#include <stdio.h>

int main() {
    int num = 100;
    int *ptr = &num;      // ptr은 num의 주소를 가리킴
    int **pptr = &ptr;    // pptr은 ptr의 주소를 가리킴
    
    printf("num의 값: %d\n", num);           // 100
    printf("*ptr의 값: %d\n", *ptr);         // 100
    printf("**pptr의 값: %d\n", **pptr);     // 100
    
    return 0;
}
  • int *ptr = 정수를 가리키는 포인터

  • int **ptr = 포인터를 가리키는 포인터

비유하자면, *는 "집 주소",

**는 "집 주소가 적힌 메모지의 주소"라고 생각하면 이해하기 쉽습니다!

rkgus88075님의 프로필 이미지
rkgus88075
Người đặt câu hỏi

감사합니다.

1개와 2개의 차이는 다시 가리키는 포인터라고 이해했습니다~

0

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

C 언어에서 포인터가 두 개로 사용될 때 여러 방식으로 해석이 가능합니다. 특히 다차원 배열이나, 포인터 배열의 경우에는 이중 포인터(double pointer) 를 접하게 됩니다.

  1. 이중 포인터란?

    • 이중 포인터는 포인터를 가리키는 포인터입니다. 예를 들어 int **ppi라면, ppiint * 타입의 포인터를 가리키는 것입니다.
  2. 예시 코드 설명:

   int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
   int *p = a[1];
  • a[1]a의 이차원 배열에서 두 번째 행을 가리킵니다, 즉 {3, 4}입니다.
  • pint * 타입으로, a[1]의 첫 번째 요소인 3의 주소를 가리키게 됩니다.
  1. 포인터 접근 차이점:

    • *a는 이차원 배열에서 첫 번째 행을 가리킵니다. 즉 a[0]과 같으며, 첫 번째 행 {1, 2}의 주소를 가리킵니다.
    • **a*(*a)와 같이 해석되어 배열의 첫 번째 요소인 1 자체를 나타냅니다.

김가현님이 이해를 돕기 위해 실제 코드로 설명해드리면:

#include <stdio.h>

int main(void) {
    int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int *p = a[1];

    printf("%d\n", *p);  // 3 : a[1]의 첫 번째 요소
    printf("%d\n", **a); // 1 : a[0][0]의 값
    printf("%d\n", *a[1]); // 3 : 역시 a[1][0]
    
    return 0;
}

위 코드를 통해 포인터가 다차원 배열을 어떻게 다루는지 실습해 보시면 이해가 더 쉬워지실 겁니다.

위에서 설명된 개념들을 더 명확히 하고 다양한 맥락에서 이해를 돕기 위해, 다음의 기존 답변을 참고해 보실 수 있습니다:
- C언어 포인터에대해서 질문입니다
- 다차원 배열과 문자열 배열 22분 쯤

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

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

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

Đặt câu hỏi