2014-02-12 4 views
1

이것은 내 프로그램의 샘플 코드입니다.함수에 대한 배열로 이중 포인터

정수 값과 정수 배열을 반환하는 데 사용되는 function이라는 함수가 있습니다. 포인터로 전달해야합니다 (function의 서명은 변경할 수 없습니다). 그래서 아래 코드를 썼습니다. 여기에 함수에 전달 된 이중 포인터에 값을 할당해야합니다.

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    //array[i] = (unsigned int*)i*10; 
    } 
    *count = 4; 
} 

int main() 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    function(&count, (unsigned int**)&array2); 

    return 0; 
} 

하지만 위의 코드는 작동하지 않습니다.

+3

프로그램에서 관찰 가능한 출력을 생성하지 않습니다. 어떻게 당신의 문제를 증명할 수 있습니까? 어떤 점에서 ** 작동하는지 확인하기 위해 ** 테스트 **해야합니다. –

+0

필자는 필자가 'function'함수에서 배열 'array2'를 지정된 값으로 채우는 것이 필요했습니다. VS에서 코드를 디버깅하여 제대로 작동하는지 여부를 확인했습니다. –

답변

2

난 당신이 이미 알고있는 가정, 당신은 배열의 첫 번째 요소에 포인터를 사용할 수있는 다음 함수 포인터의 주소를 전달합니다.

이런 식으로 당신은 배열의 첫 번째 요소 인 부호없는 int와 이중 포인터 것이다 :

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    (*array)[i] = i*10; // WATCH OUT for the precedence! [] has higher precedence! 
    } 
    *count = 4; 
} 

int main(int argc, char* argv[]) 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    unsigned int *pointer_to_array = &array2[0]; 
    function(&count, (unsigned int**)&pointer_to_array); 

    return 0; 
} 

(!) 참고로 :

을 당신은 서명을 변경할 수 있다면 이 말이 더 이해할 수 있습니다.

void function(unsigned int* count, unsigned int * array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    array[i] = i*10; 
    } 
    *count = 4; 
} 

int main(int argc, char* argv[]) 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    function(&count, array2); 

    return 0; 
} 

이유는 배열을 (직접 또는 그 배열에 대한 명시 적 포인터를 사용하여) 함수에 전달하면 기본적으로 포인터가됩니다. 이를 어레이 붕괴이라고합니다.

+2

그는 기능 서명을 분명히 바꿀 수 없습니다 (자세한 내용은 질문 참조). 아마도 숙제입니까? –

+1

폴 감사합니다, 나는 그 하나를 놓쳤다! –

+1

@ Paul : 귀하의 의견은 웃기는 것 같습니다. 어쨌든 지원해 주셔서 감사합니다. –

0

포인터로 전달 된 배열에 할당하려면 먼저 역 참조 한 다음 값을 할당하십시오. 개념을 재사용함으로써

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    (*array)[i] = i*10; 
    } 
    *count = 4; 
} 
1
void function(unsigned int* count, unsigned int ** array){ 
    for(unsigned int i = 0; i<4;i++){ 
     (*array)[i] = i*10; 
    } 
    *count = 4; 
} 

int main(){ 
    unsigned int count; 
    unsigned int array2[4]; 
    unsigned int *p = &array2[0]; 
    function(&count, &p); 
    return 0; 
}