2013-10-18 3 views
-1

2D 배열을 함수에 전달하는 방법에 대한 질문이 있습니다.
C++ 배열 및 함수

는 나는이 같은 일을 할 수 알고 :

void print(int a[][20]){ 
    cout << "print 1" << a[10][10] << endl; 
} 
int main(){ 
    int a[20][20]; 
    print(a); 
    cout << "print 2" << *(*(a+10)+10) << endl; 
} 

인쇄 1과 2는 나에게 같은 결과를 제공해야합니다.
올바른 경우 2D 포인터입니다.

하지만 내가 할 수없는이

void print(int** a){ 
} 
int main(){ 
    int a[20][20]; 
    print(a); 
    cout << "print 2" << *(*(a+10)+10) << endl; 
} 

오류는 다음과 같습니다
cannot convert ‘int (*)[20]’ to ‘int**’ for argument ‘1’ to ‘void print_int(int**)’
내가 이것을 왜 할 수 없어? 당신은 배열 표기하지 포인터 배열로 표기법을 사용한다

+2

이렇게하면됩니다 : void print (const std :: vector >). HTH. –

+0

이것은 C/C++로 시작할 때 매우 일반적인 오류입니다. –

+0

고마워요. – sflee

답변

0

포인터되지 않습니다

cout << "print 2" << a[11][11] << endl; 
+0

@Angew 당신이 옳았고, 일반적으로 저는 그것을 알고 있습니다. 다른 말을하고 싶었지만 C 언어의 2 차원 배열에 혼란스러워했습니다. :-) –

2

int **은 INT 아닌 2 차원 배열에 대한 포인터에 대한 포인터입니다.

1

int **는 "int 포인터의 포인터"이기 때문에. "20 ints에 대한 포인터"와 같지 않습니다. 따라서 두 번째 코드는 집에서 주소가있는 사람의 주소를 전달하는 대신 집이있는 거리의 주소를 전달하는 것과 같습니다.