2013-12-22 13 views
2

하면 컴파일되지 않습니다 다음C++ int main (int argc, char * argv []) - argv 형식의 배열입니까?

int main (int argc, char *argv[]) { 
    char arr[2][2]; 
    char **ptr = arr; 
    return 0; 
} 

을 그러나 다음은 수행합니다

int main (int argc, char *argv[]) { 
    char **ptr = argv; 
    return 0; 
} 

따라서 차라리입니다 ARGV 메모리의 단일 블록으로 저장됩니다 교류 스타일의 배열이 아닌 결론하지만 것 어떤 종류의 포인터 배열. 누군가 그것을 확인할 수 있습니까?

감사합니다.

+0

'argv'가 배열의 배열이면, 내부 배열의 크기는 타입의 일부가됩니다. 그리고 그들은 모두 같은 크기 여야합니다. –

+0

'arr'은'char ** '타입의 포인터를 가리키는 포인터와 같지 않은'char (*) [2]'타입의 배열에 대한 포인터로 쇠퇴합니다. – aschepler

답변

5

맞습니다. argv은 포인터 배열의 첫 번째 요소에 대한 포인터입니다. 각 포인터는 차례대로 (마지막 포인터는 제외) 각 명령 줄을 나타내는 문자 문자열의 첫 번째 문자를 가리키는 포인터입니다 논의.

배열 매개 변수가 될 수 없습니다.

+0

배열 타입 매개 변수와 같은 것은 존재하지 않는다는 것에 대한 답을 삭제했습니다. 심지어 배열 대 포인터 변환 때문에 여전히 작동 할 것이기 때문입니다. 주된 문제는 내부 유형이 포인터가 아니라 배열이라는 것입니다. –

관련 문제