2017-10-19 7 views
0

아마도 이것은 이전에 묻는 질문과 같을 것입니다. C의 배열과 포인터의 차이점에 대해 많은 질문이 있지만,이 질문에 답하기에는 충분한 정보가 없습니다.C : int의 2D 배열을 int **에 할당하면 CLION이 선을 강조 표시하는 이유는 무엇입니까?

C 배열의 이름은 메모리 블록의 시작 포인터와 같은 것으로 처리되지만, int의 3 x 3 2D 배열의 이름을 int ** 내 CLION의 IDE, 그것은 할당을 강조하고 말한다 :

호환되지 않는 포인터 타입 'INT * *'와 'INT [3] [3]'

int x[3][3]; 
int **px = x; <-- warning here 

내가 캐스팅 할 수있는 할당 값을 (int **)로 설정하면 강조 표시가 물론 사라집니다.하지만 - 헤이 - 캐스트 할 수 있습니다. C에서 물건의 helluva 제비와 멀리 사라질 하이라이트를 얻을. 당신이 요구하는 것이 작동 할 것이라는 것을 의미하지는 않습니다.

이 문제는 CLION (또는 더 적절하게는 깔끔) 문제일까요? 아니면 진짜 문제입니까? 어떤 상황에 대한

[편집]

는, 배열/포인터의 차이점에 대한 다른 모든 답변이 문제는 3 × 3 배열은 INT ** 아니기 때문에 왜 그들 중 많은 사람들이 "그 같은 일을 말할 것입니다! " 고맙지 만 그것은 꽤 쓸모없는 정보입니다. 질문하는 사람은 이미 3x3 배열이 int가 아니라는 것을 알고있을 것입니다 ** - 질문은 컴파일 후에 결과 int **를 어떻게 처리합니까? 배열인가요?

+0

문제의 라인을 게시 할 수 있습니까? – Blacksilver

+4

2 차원 배열은 ** 포인터 배열이 아니라 **입니다. –

+1

'int **'는'int *'의 순차적리스트입니다; 'int [3] [3]'은 3 개의 int 순차리스트 3 개 순차리스트입니다. 'int []'는 배열의 첫 번째 요소의 주소로 해석함으로써'int *'로 쇠퇴하지만, 이는 일시적으로 작동하지 않습니다. – zneak

답변

2

누군가는 나를 다차원 적으로 수정할 수 있지만 다차원 배열은 아닐 수도 있고 일반적으로 포인터 배열로 구현되지 않을 수도 있습니다. 역 참조를 위해 일부 구문 설탕이있는 인접한 메모리 조각입니다.

자세한 내용은 this을 참조하십시오.

+0

감사합니다. @ orhtej2 - 어떻게 그 답을 놓쳤는지 모르겠군요. 제 질문에 완벽하게 대답합니다. –

+0

예,하지만 "구문 설탕"은'int ** '와 호환 가능합니다. –

+0

@AntonMalyshev 어떻게 볼 수 있습니까? 내가 제공 한 링크는 그렇지 않은 것을 제안합니다. – orhtej2