在c中通过引用在函数内起作用

时间:2012-12-08 15:12:46

标签: c function

我想在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。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你不能这样做,在AtoB函数中你已经将h1声明为指针而在AtoC函数中你传递了该指针的地址。这两个函数应该具有相同的声明,如* h1,* h2,* h3。