강의

멘토링

로드맵

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

송주영님의 프로필 이미지
송주영

작성한 질문수

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

다차원 배열과 문자열 배열

문자열 배열

해결된 질문

작성

·

15

0

  1. [다차원 배열과 문자열 배열] 강의

     

    22:11초

     

    => const char

    *arr[2][2] = {{"Hello", "World"

    },{"app", "dev"}}; 여기서 arr변수가 포인터 변수로 선언되었는데 왜 포인터 변수인지 궁금합니다! 그리고 포인터 변수가 아닌 arr[2][2]로 쓰면 출력값이 다르게 나오는지도 궁금합니다!

     

    어떤 차이로 해당 문제에 포인터 변수를 사용한 걸까요?

     

답변 2

0

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

안녕하세요,

C언어에서는 문자열을 저장할 수 있는 형태가 없습니다. 배열로 선언하거나, 문자 포인터로 문자열의 시작점의 메모리 공간을 기억하는 방법 밖에 없습니다.

 

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

 

이 코드에 대해서 설명을 드리자면

- const char arr[2][2] const char 포인터의 2×2 배열

- 즉, arr[0][0], arr[0][1], arr[1][0], arr[1][1] 각각이 문자열을 가리키는 포인터입니다

 

메모리 구조:

arr[0][0] ──→ "Hello" (메모리 어딘가)

arr[0][1] ──→ "World" (메모리 어딘가)

arr[1][0] ──→ "app" (메모리 어딘가)

arr[1][1] ──→ "dev" (메모리 어딘가)

 

애초에 char arr[2][2] = {{"Hello", "World"}, {"app", "dev"}}; 이렇게 정의하면

오류가 발생합니다. 정상적으로 코드가 실행되지 않습니다. 문자열은 문자 형태 값 1개에 저장할 수 없기 때문입니다.

 

비슷한 질문과 답변이 있어서 함께 공유드립니다.

링크1

https://inf.run/ZuV9T

 

링크2

https://inf.run/WeJww

0

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

다차원 배열과 문자열 배열에서 const char *arr[2][2]char arr[2][2] 사이의 차이에 대해 설명드리겠습니다.

포인터 배열 (const char *arr[2][2])

  1. 포인터를 사용하는 이유:
    • char *arr[2][2] 는 문자열을 가리키는 포인터의 2x2 배열입니다. 이 구조는 각 배열 요소가 문자열의 시작 주소를 가리키도록 설계되어 있습니다.
    • 이러한 방식으로 배열을 선언하면, 배열 요소 내에 직접 문자열 데이터가 들어가지 않고, 문자열 데이터가 저장된 위치의 주소가 배열 요소로 저장됩니다. 메모리의 효율적 사용과 관리가 가능해지며, 문자열의 길이가 다양할 경우에도 유연하게 대응할 수 있습니다.

일반 배열 (char arr[2][2])

  1. 메모리 할당 방식:
    • char arr[2][2] 를 사용할 경우, 각 배열 요소는 실제로 두 개의 캐릭터 값을 저장합니다.
    • 이 경우 초기화 시 각각의 문자열에는 필요한 공간보다 더 적은 메모리가 할당되어, 데이터가 올바르게 저장되지 않거나 잘릴 수 있습니다.

중요한 차이점

  • 유연성: 포인터 배열은 가변적인 문자열을 다루기에 효과적입니다. 배열 요소가 단지 포인터로 구성돼 각기 다른 길이를 가진 문자열을 담을 수 있습니다.
  • 고정된 길이 문제: 일반 char arr[2][2] 배열은 각 문자열이 2개의 문자만을 저장할 수 있으므로, 헤멬을 초과하면 데이터가 소실되거나 예상치 않은 동작이 발생할 수 있습니다.

관련된 유사 질문을 찾아보시길 추천드립니다. 유사한 질문과 답변은 아래의 링크에서 확인할 수 있습니다.

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

송주영님의 프로필 이미지
송주영

작성한 질문수

질문하기