2017-03-26 1 views
0

메신저가 C에 새로 추가되었으므로 "할당"은 여기에서 사용할 올바른 단어가 아닐 수 있습니다.포인터에 2 차원 배열의 첫 번째 포인터를 할당합니다.

int의 포인터에 대한 포인터를 반환하는 this와 같은 함수가 있다고 가정 해보십시오. main() 함수에서

int **foo(){} //I wouldn't care much what this function does 

내가이

int playground[10][10]; 
playground=foo(); 

같은 배열을 정의하지만 컴파일러는이 오류의 나에게 경고 : 배열 유형 놀이터 = foo에와 표현에

할당();

여기 실제로 잘못된 것은 무엇입니까? 내가 아는 한, 놀이터은 2 차원 배열이므로 int의 포인터를 가리키는 포인터가 될 것이다. 정확히 어떤 함수 foo()이 반환한다.

누군가 설명 할 수 있습니까? 많은 감사합니다!

+0

단지 놀이터를 int ** 놀이터로 정의하십시오. 그러나 foo() 안에서 2 차원 배열을위한 공간을 할당해야 할 수도 있습니다. – Shiping

+0

어이, 나는 기억 문제를 돌봐 줬지만 여전히 왜 내 방식이 제대로 작동하지 않는지 궁금해했다. 왜냐하면 내가 아는 한, "놀이터"를 쓸 때 실제로 배열의 첫 번째 요소에 대한 포인터를 의미하기 때문이다. 예제에서 작동합니까? –

+0

놀이터 [10] [10]은 2 차원 배열에 대한 포인터가 아닌 2 차원 배열이지만 foo()는 2 차원 배열에 대한 포인터를 반환합니다. – Shiping

답변

0

배열은 포인터가 아닙니다. 특히 배열은 할당 할 수있는 lvalue가 아니므로 배열 이름은 대입 문의 왼쪽에 혼자있을 수 없습니다. 원하는 :

int **playground; 
playground = foo(); 
+0

고맙습니다.하지만 항상 "놀이터"를 쓸 때, c는 배열의 첫 번째 요소에 대한 포인터를 줄 것이라고 생각합니까? –

+0

항상 그렇지 않습니다. 예를 들어, 배열이'sizeof'에 의해 작동 될 때. 필요한 모든 세부 사항을 얻으려면 [comp.lang.c Arrays & Pointers 관련 FAQ 섹션] (http://c-faq.com/aryptr/index.html)을 확인하십시오. 이 경우 –

+0

일 경우 데이터/값 검색을위한 배열의 위치를 ​​가리 킵니다. 그러나 다른 곳을 가리 키도록 변경할 수는 없습니다. – Shiping

관련 문제