2013-03-07 2 views
0

main()의 값을 method()으로 전달하는 데 문제가 있습니다. 변수가 "selected"이고 version()이라는 다른 함수로 채워져 있습니다. selected은 2 차원 매트릭스입니다.main에서 특정 함수로 배열을 전달하는 데 문제가 있습니다.

check[1]=selected[1][1] 
check[2]=selected[1][2] 
. 
. 
. 
check[190]=selected[19][10]. 

는 다음 나는 기능 method()의 벡터 "확인"을 사용할 필요가 있고, 그건 내 문제 야 ... 난 ... 제대로

를 전달할 수 없습니다 그때 check라는 한 차원 매트릭스에이 값을 할당
int main() 
{ 
    double **selected; 
    version(&selected); 

    double *check; 
    check=dvector(n*T); 

    for(v=1;v<=n;v++) { 
    for(t=1;t<=T;t++){ 
     check[v]=selected[v][t]; 
    } 
    } 

    method(check); 

} 

void version(selected) 
double ***selected; 
{ 
    *selected=dmatrix(n,T,1,1); 
    . 
    . 
    . 
    for(v=1;v<=n;v++) { 
    for(t=1;t<=T;t++){ 
     (*selected)[v][t]=xd[v][point[v][t]]; 
    } 
    } 
} 

void method(check) 
double *check; 
{ 

    for(v=1;v<=n;v++) { 
    for(t=1;t<=T;t++){ 
     printf("check[%u]=%f\n",v,check[v]); 
    } 
    } 
} 

의견을 보내 주셔서 감사합니다.

+3

어떤 언어입니까? 나는 그것이 내가 아는 어떤 언어로도 컴파일 (또는 해석)하지 않을 것이라고 생각한다. –

+0

당신은 [v]를 T 번 덮어 씁니다. – QuentinUK

+0

@IvayloStrandjev 죄송합니다, 언급하는 것을 잊었습니다! 그것은 C 언어입니다. 그리고 당신은 옳습니다. 이것은 완전한 코드를 보여주지 않았기 때문에 컴파일되지 않습니다. 이것이 제 문제를 증명하는 데 충분한 정보 일 것이라고 생각했습니다. – user2080190

답변

0
check=dvector(n*T); 

    for(v=1;v<=n;v++) { 
    for(t=1;t<=T;t++){ 
     check[v]=selected[v][t]; 
    } 
    } 

여기서 체크는 길이가 n * T이지만 나중에 v는 1에서 n까지이므로 체크의 첫 번째 n 요소 만 값을 얻습니다. 나머지는 모두 정의되지 않습니다. 제로 배열 오프셋의 경우 V가 올바르게 1의 오프셋 (offset) 여기서 V의 * T의 +의 t으로 대체하지만, 될 수는있다 (V-1) * T + (t-1) +1 : -

 check[v*T-T+t]=selected[v][t]; 
+0

감사합니다. @QuentinUK – user2080190

0

을 배열에 함수를 전달하면 &을 줄 필요가 없습니다. 배열은 항상 참조로 전달됩니다. marsversions(selected);

+0

감사합니다. @Vishal Vijay – user2080190

+0

문제가 해결 되었습니까? –

관련 문제