2012-12-08 34 views
-3

我想通過在c.They參考都使用相同的parameters.This傳遞函數中的函數的代碼是功能通過在C基準

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
void AtoB(int *A, int *B, int *C, int n,int *h1,int *h2,int *h3); 
void AtoC(int *A, int *B, int *C, int n,int *h1,int *h2,int *h3); 
void BtoC(int *A, int *B, int *C, int n,int *h1,int *h2,int *h3); 
void function2(int *A, int *B, int *C, int n); 

int main(){ 
int n; 
int e; 
int h3=1; 
int h2=1; 
int h1=0; 
int min; 
int *A; 
int *B; 
int *C; 



printf("Give me the number of disks:"); 
scanf("%d",&n); 
A = (int *) calloc(n,sizeof(int)); 
B = (int *) calloc(n,sizeof(int)); 
C = (int *) calloc(n,sizeof(int)); 
min=pow(2,n)-1; 
for (e=0;e<n;e++){ 
    A[e]=e+1; 
} 

if (n%2==0){ 
for (e=0;e<min/3;e++){ 
    AtoB(A,B,C,n,&h1,&h2,&h3); 



} 



} 



























free(A);free(B);free(C); 

return 0; 
} 


int function1(int Z[],int n){ 
int j,i,k,a; 
for (i=0;i<n;i++){ 
k=n-Z[i]; 
    for (j=0;j<n;j++){ 
    if(k==j){ 
    for(a=0;a<2*Z[i]-1;a++){ 
    printf("%d",Z[i]); 
    } 
    } 
    else if((j==n-1)&&(Z[i]==0)){ 
    printf("|"); 
    } 
    else{ 
    printf(" "); 
    } 
    } 
printf("\n"); 

}for(i=0;i<2*n-1;i++){ 
printf("-"); 
} 
printf("\n\n"); 
return 0; 
} 
void function2(int A[],int B[],int C[],int n){ 

    printf("A\n"); 
    function1(A,n); 
    printf("B\n"); 
    function1(B,n); 
    printf("C\n"); 
    function1(C,n); 
} 

void AtoB(int A[],int B[],int C[],int n,int *h1,int *h2,int *h3){ 
    if (B[n-1]==0){ 
    printf("A->B\n"); 
    B[n-1]=A[*h1]; 
    A[*h1]=0; 
    *h1=*h1+1; 
    function2(A,B,C,n);} 
    else if (A[n-1]==0){ 
    printf("A->B\n"); 
    A[0]=B[n-*h2]; 
    B[n-*h2]=0; 
    *h2=*h2-1; 
    function2(A,B,C,n); 

    } 
AtoC(A,B,C,n,&h1,&h2,&h3); 


} 

void AtoC(int A[], int B[], int C[], int n,int *h1,int *h2,int *h3){ 



} 

程序必須解決河內塔而示出了塔結構。

我收到錯誤:從不兼容的指針類型傳遞參數5'AtoC'。提前感謝。

+3

http://sscce.org/ –

+3

如果到'AtoC()'的接口需要'int *'作爲參數5,6,7,那麼您需要從'&h1,&h2,&h3中刪除'&'在通話中。既然你沒有展示'AtoC()'的原型,我們只能猜測。奇怪的是,只有在預期三次時才提到一個錯誤。 –

回答

0

你不能這樣做,在AtoB函數中,你已經聲明h1爲一個指針,而在AtoC函數中你正在傳遞該指針的地址。兩個函數都應該具有相同的聲明,如* h1,* h2,* h3。