-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 回答