2014-06-13 5 views
4
인 배열 매개 변수

전체 치수를 지정하는 경우에도 배열의 크기는 포인터 중 하나 일뿐입니다. 이것도 부식입니까?크기가

#include <iostream> 
using namespace std; 

void function(char* arr[1][2]){ 
    cout << sizeof(arr); // 4 
} 

int main() { 
    char* params2d[1][2] = { {"hello", "world"} }; 
    cout << sizeof(params2d); // 8 
    function(params2d); 
    return 0; 
} 
+1

그렇습니다. 'int n [42]'는 함수 매개 변수 일 때'int n []'과'int * n'과 같습니다. 그리고 배열 인자는 포인터를 잃는다. – juanchopanza

+1

모든 것이 부패합니다 ... –

답변

3

모든 함수 선언

void function(char* arr[1][2]); 
void function(char* arr[][2]); 
void function(char* (*arr)[2]); 

은 동일합니다. 다차원 배열의 경우 첫 번째 차원을 생략 할 수 있습니다. 그래서, 당신은

void function(char* arr[1][2]); 

또는

void function(char* arr[10][2]); 

컴파일러를 쓰기 여부를 기준으로 배열을 전달하기 위해

void function(char* (*arr)[2]); 
1

예, 부식 중입니다. "X 배열"의 함수 매개 변수는 "X에 대한 포인터"에 대한 구문 설탕입니다. 매개 변수의 형식이 "배열에 대한 참조"가 아니라면 해당 매개 변수의 인수로 사용 된 배열은 이고 항상이 포인터로 변환됩니다.

1

로 변환, 당신은 사용해야합니다 : 현재

void function(char* (&arr)[1][2]) 

귀하의 선언은 다음과 유사합니다 :

void function(char* (*arr)[2]); 
+3

이것은 질문에 대답하지 않습니다. – juanchopanza