2017-12-31 71 views
4

예 :c 및 C++에서 2 차원 배열 요소의 유형은 무엇입니까?

int arr[2][3] = ... 

arr[0]의 유형은 구글이 나에게 질문에 대해 아무것도 알 수 없습니다

int (*)[3] // pointer to int[3], which is a pointer. 

또는

int[3] // an array whose size is 3, which is an array. 

입니다.

포인터와 배열이 다른 유형 (파생 유형)이라는 것을 알고 있습니다.

어쩌면 C와 C++이 다르게 취급하기 때문에 표준 문구가 표시되기를 바랍니다.

+0

@coderredoc 감사합니다. 배열과 포인터 사이의 변환에 대해서는 의심 스럽지만 확실하지는 않습니다. 이제 해결되었습니다. – czxyl

+0

행복한 학습과 최고의. – coderredoc

답변

15

arr[0]은 포인터가 아닌 int [3]입니다.

int (*p)[3]int(*)[3]이고 3 요소의 배열을 가리키는 포인터입니다.

포인터가 배열이 아니며 배열이 포인터가 아닙니다. 만약 기능 (또는 감쇠가 발생하는 임의의 경우)이 2 차원 어레이를 통과 할 때

지금 그것은 int (*)[3]는 첫 번째 요소 포인터로 붕괴.

C 2d 어레이는 배열 배열에 불과합니다.

  • arr 해부

    있는 3 요소 배열이 다시 인 요소 각각 배열이다.

  • arr[0] 대부분의 경우 (sizeof 제외)는 포함 된 첫 번째 요소에 대한 포인터가 부패합니다 (int*).

  • arr[0][0]int입니다.

  • 마지막으로 &arr[0]. 형식은 int(*)[3]입니다.

+0

설명은 확장 토론이 아닙니다. 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/162259/discussion-on-answer-by-coderredoc-whats-the-type-of-2d-arrays-element-in- 양철통). –