-3

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 ){



}

プログラムは、タワーの構造を表示しながらハノイ タワーを解決する必要があります。

エラーが発生しています: 互換性のないポインター型から 'AtoC' の引数 5 を渡しています。よろしくお願いします。

4

1 に答える 1

0

そのようにすることはできません。AtoB 関数では h1 をポインターとして宣言し、AtoC 関数ではそのポインターのアドレスを渡しています。両方の関数は、*h1、*h2、*h3 のように同じ宣言を持つ必要があります。

于 2012-12-08T15:24:21.770 に答える