강의

멘토링

로드맵

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

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

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

(Mới nhất 2026!) Vượt qua kỳ thi thực hành Kỹ sư xử lý thông tin chỉ trong một tuần

Mảng đa chiều và mảng chuỗi

다차원 문자 배열 관련 포인터 변수

Đã giải quyết

Viết

·

35

0

다차원 배열과 문자열 배열 21:45

 

다차원 문자열 배열에서 포인터 변수 관련으로 질문이 있습니다.

 

*arr[2][2]={{"Hello", "World"}, {"app", "dev"}}

이렇게 2차원 문자 배열이 있을 때

printf("%c\n", arr);의 답은 arr의 초기값으로

H인지 아니면 Hello인지 궁금합니다.

그리고 arr+1 또는 arr ++ 하면 다음 주소로 이동하는 값을 나타내는 것이라고 하는데 그러면 답이 e인지 아니면 World인지 궁금합니다.

 

pythonjavac정보처리기사정보처리산업기사

Câu trả lời 2

0

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

메모리 주소가 들어있는 변수를 %c로 출력하려고 하면 오류가 발생합니다.

우리가 배운 범위에서 메모리 주소는 받아서 출력하는 것은 %s밖에 없습니다.

 

지금 printf로 출력하시려는 변수 arr은 메모리 주소이고, 그래서 %c로 하면 오류가 발생합니다.

 

arr의 구조는 이렇습니다.

const char *arr[2][2] = {{"Hello", "World"}, {"app", "dev"}};

// 이건 문자 배열이 아니라 포인터 배열입니다. 메모리 구조는 이렇습니다:

arr[0][0] → 포인터 → "Hello"
arr[0][1] → 포인터 → "World"
arr[1][0] → 포인터 → "app"
arr[1][1] → 포인터 → "dev"

 `arr` 자체는 `arr[0]`의 주소, 즉 "포인터의 포인터"입니다.

 

arr+1은 뭘 가리키나?

arr의 타입은 const char ()[2]포인터 2개짜리 행의 주소입니다.

그러므로 arr+1다음 행 arr[1]의 주소로 이동합니다.

arr → { arr[0][0], arr[0][1] } // {"Hello", "World"} 
arr+1 → { arr[1][0], arr[1][1] } // {"app", "dev"}

 

정리하자면,

printf("%s\n", arr[0][0]);       // Hello  ✅
printf("%c\n", arr[0][0][0]);    // H      ✅
printf("%s\n", arr[0][0]+1);     // ello   ✅ (포인터+1 = 다음 문자)
printf("%s\n", arr[1][0]);       // app    ✅

이렇게는 출력할 수가 있습니다.

 

전체 코드를 보여드리자면,

#include <stdio.h>

int main() {
    const char *arr[2][2] = {{"Hello", "World"}, {"app", "dev"}};

    // 기본 출력
    printf("1. %s\n", arr[0][0]);
    printf("2. %s\n", arr[0][1]);
    printf("3. %s\n", arr[1][0]);
    printf("4. %s\n", arr[1][1]);

    // 포인터 활용 출력
    printf("5. %s\n", arr[0][0]);
    printf("6. %c\n", arr[0][0][0]);
    printf("7. %s\n", arr[0][0]+1);
    printf("8. %s\n", arr[1][0]);

    return 0;
}

 

출력값은

1. Hello

2. World

3. app

4. dev

5. Hello

6. H

7. ello

8. app

입니다.

0

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

다차원 배열을 사용하면서 발생할 수 있는 혼란에 대해 설명드리겠습니다.

1. 다차원 배열에서 포인터 변수의 역할

char *arr[2][2] 구조는 다양한 문자열을 저장하는 배열입니다. 각 요소는 특정 문자열의 시작 주소를 가리키며, 이는 상대적인 메모리 주소로 구성됩니다.

2. printf("%c\n", arr);의 결과

arr 자체는 포인터 배열의 첫 번째 요소를 가리키기 때문에, 단순히 arr로는 배열의 첫 번째 문자열 즉, “Hello”의 시작 주소를 가리킵니다. 하지만 %c 포맷은 단일 문자를 출력하기 때문에 printf("%c\n", *arr[0][0]);은 ‘H’를 출력합니다.

3. arr + 1 또는 arr++의 동작

arr는 시작 주소일뿐, 이런 상황에서 arr + 1은 다음 배열 위치로 한 단계 전진하여 “World“의 시작 주소를 가리킵니다. 하지만, 배열 전체에서 포인터 산술이 적용되며, 일반적으로 이러한 산술의 결과는 의미 있는 데이터로 바로 쓰이지 않으니 신중히 다가서야 합니다. 여기서 “e”가 아니라 “World“의 첫 문자를 가리키게 됩니다.

유사 사례 및 설명

해당 주제를 더 깊이 이해하고 싶으시다면, 다차원 배열과 문자열 배열 22분 쯤 링크를 읽어보시는 것을 추천드립니다. 이 링크에서는 포인터와 배열의 기본 개념을 확장하는 방식으로 이해를 돕고 있습니다.

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

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

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

Đặt câu hỏi