我想在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 ){
}
该程序必须在显示塔结构的同时解决河内塔。
我的问题是在尝试从AtoB函数传递AtoC时,我以相同的方式从主函数传递AtoB,没有出现问题。为什么?
我收到错误:从不兼容的指针类型传递'AtoC'的参数5。提前谢谢。
答案 0 :(得分:0)
当函数AtoC
期望指针作为第5个参数时,您尝试将指针传递给指针。发送h1
代替&h1
。