인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

yunysj76님의 프로필 이미지
yunysj76

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.14 2차원 배열과 포인터

pa와 ap

작성

·

19

1

image.pngimage.png

 

답변 2

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

float arr2d[2][4] = { {1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};2 x 4 배열로 8 개의 float 값이 선언되어있지만, 중요한 점은 2 개의 행, 각 행당 4 개의 열을 가진 2차원 배열이라는 점입니다.
이 때, float(*pa)[4] 는 "4 개의 float 원소를 가진 배열을 가리키는 포인터" 이며, 이는 2차원 배열에서 한 행을 가리키는 포인터입니다. 따라서, 정확히 한 행의 크기인 4 를 명시해주어야 합니다.
만약, float(*pa)[8] 처럼 크기를 8 로 선언하신다면 "8 개의 float 원소들을 가진 배열을 가리키는 포인터" 가 되어, 현재의 2 x 4 배열 구조와 맞지 않게 됩니다.
크기 4pa + 1 과 같은 포인터 연산 등에 필요한 정보이므로 알맞게 작성해주어야 합니다.

 

float(*pa)[4] 에서 괄호가 없다면, 즉, float *pa[4] 과 같이 선언한다면 "4개의 float 포인터 배열" 을 의미하게 됩니다.
하지만, 괄호를 사용함으로써 float(*pa)[4] 는 "4개의 float 원소를 가진 배열을 가리키는 포인터" 라는 의미를 갖게 됩니다.

 

또한, 2차원 배열은 메모리에 연속적으로 저장된다는 점( float arr2d[2][4]8 개의 float 이 연속된 메모리 공간에 저장됨)과 포인터 연산의 특성(pa + 14 개의 float 크기만큼 이동하여 다음 행을 가리킴, ptr[1] 은 두번 째행의 시작주소)으로 인하여 모두 같은 메모리 위치를 가리킬 수 있기 때문에 float(*pa)[4] 는 이중 포인터와 호환이 가능한 형태로 사용될 수 있습니다.

예제의 핵심에 대하여 말씀하신 부분은 잘 이해하신 것 같습니다.
다만, 전반적으로 더욱 중요한 부분 해당 강의의 다양한 예제들을 통해 보여지는 2차원 배열과 포인터의 관계라고 생각합니다.

 

궁금한 점 있으시면 편하게 댓글 남겨주세요.

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

감사합니다!

0

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

yunysj76님께서 주신 질문에 대한 이해를 돕기 위해 관련된 기존 질문과 답변을 찾아보았습니다. 포인터와 관련된 개념은 특히 C 언어에서 자주 헷갈리기 쉬운 부분 중 하나입니다. 질문에 주신 코드와 관련하여, 다음 내용들이 도움이 될 수 있습니다.

관련 질문 및 답변

  1. 포인터의 기본주소가 이해가 되지 않습니다.

    • 이 질문에서는 2차원 배열의 포인터와 관련하여 주소 계산에 대해 설명합니다. 2차원 배열의 경우 주소 참조 시 &arr[0][0]&arr[0] 의 차이를 이해하는 것이 중요하다는 점을 설명하고 있습니다.
  2. 2차원 배열의 주소 관련 질문.

    • 이 질문에서는 왜 2차원 배열의 주소를 일반 포인터에 할당할 때 경고가 발생하는지에 대해 설명하고 있습니다. 2차원 배열의 경우 메모리 상에서 1차원 배열처럼 연속적으로 저장되기 때문에 발생하는 이해 차이를 다룹니다.
  3. 08:15초 (10.15) 2차원 배열의 주소를 일반 포인터에 담을 때 생기는 Warnimg 관련 질문

    • 이 질문에서는 경고와 오류의 차이점을 통해 2차원 배열을 포인터로 사용할 때 발생할 수 있는 잠재적인 문제점을 다루고 있습니다. 포인터의 호환성 문제로 인해 워닝이 발생하는 이유를 설명합니다.

위의 자료들은 포인터와 관련된 중요한 개념들과 일반적인 실수들을 피할 수 있도록 돕는 정보를 제공합니다. 특히 포인터와 배열의 관계, 각 요소가 메모리에서 어떻게 위치하는지를 이해하는 것이 중요합니다.

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

yunysj76님의 프로필 이미지
yunysj76

작성한 질문수

질문하기