2014-11-26 5 views
0

배열을 인수로 사용하는 테스트 함수가 있습니다. 그리고 나는 포인터의 배열을 가지고있다. 누군가 그것을 전달할 때 왜 포인터 배열에 대한 포인터를 추론해야하는지 설명 할 수 있습니까?포인터 배열에 포인터 전달

void test(States a[]){ 

    cout << a[0].name << endl; 
    cout << a[1].name << endl; 
} 

test()가 호출 : 명확하게 인수 유형이 테스트 함수의 인수가 너무

void test(States *a[]); 

그러나 귀하의 경우를 기대하는 경우가 역 참조 할 필요가 없습니다

States *pStates[MAX_STATES]; 
test(*pStates); //Or test(pStates[0]) 
       //Can't do test(pStates); 

답변

0

입니다 States [], 그래서 당신은 포인터를 전달해야합니다. 이 대신

void test(States *a[]){ 
    cout << a[0]->name << endl; 
    cout << a[1]->name << endl; 
} 
+0

감사를 참조하십시오. 이것은 정확하게 내가 찾던 설명이 아니 었습니다. 나는 그것을 알아 냈다.'pStates'는 객체에 대한 포인터를 가리키는 포인터이고, 그것을 배열을 받아들이는 함수에 건네줌으로써, 객체에 대한 포인터를 얻기 위해'pStates'를 역 참조 할 필요가있다. 거기에서 배열 인덱싱을 사용하는 포인터 연산뿐입니다. –

0

사용 :

당신은 테스트 함수로 다시 작성 할 수 있습니다

void test(States* a[]){ 

    cout << a[0]->name << endl; 
    cout << a[1]->name << endl; 
} 

을 그리고 당신은

0

... 그것은 역 참조로 선언이 필요하지 않습니다 pStates은 포인터 배열을 선언합니다. 배열에 대한 포인터가 아닙니다. 그러나 함수 void test(States a[]);은 개체 배열 (States 개체)을 필요로합니다.

하나를 다른 캐스팅 할 수 없습니다.

#include <iostream> 

typedef struct { 
    int name; 
} States; //Surely this should be called State (not plural) 

const size_t MAX_STATES=2; 


void test(States a[]){ 
    std::cout << a[0].name << std::endl; 
    std::cout << a[1].name << std::endl; 
} 

int main() { 

    States lFirst; 
    States lSecond; 
    lFirst.name=1; 
    lSecond.name=7; 


    //Here's what you had. 
    States*pStates[MAX_STATES]; 

    //Now initialise it to point to some valid objects. 
    pStates[0]=&lFirst; 
    pStates[1]=&lSecond; 

    //Here's what you need to do. 
    States lTempStates[]={*pStates[0],*pStates[1]}; 

    test(lTempStates); 
    return EXIT_SUCCESS; 
} 

여기 https://stackoverflow.com/help/mcve