错误:不兼容的整数到指针转换传递'unsigned long'

时间:2014-07-19 10:10:01

标签: c pointers

当将指向长整数的指针作为函数参数传递时,我收到以下警告消息。

  

警告:与指针转换不兼容的整数传递' unsigned   长'参数类型' unsigned long *';去掉 *   [-Wint-conversion] reverse(* n1);

     

Recursion_Reverse.c:16:29:注意:将参数传递给参数' n1'   在这里:void reverse(unsigned long *n1)

以下是代码段。在此先感谢!

void reverse(unsigned long *);

int main() { 
    unsigned long n; 

    printf("\nEnter Any Nnmber:");    
    scanf("%lu",&n); 

    reverse(&n);    
    printf("\nAfter Reverse,n=%lu\n",n); 

    return 0;
}


void reverse(unsigned long *n1) {
    unsigned long sum=0;
    if(*n1>0) 
    {
        sum=(sum*10)+(*n1%10);
        *n1/=10;
        reverse(*n1);
    }

    *n1=sum;
}

3 个答案:

答案 0 :(得分:1)

void reverse(unsigned long *n1)函数内部递归调用它:

reverse(*n1);

所以你传递的是直接unsigned long而不是它的指针。 正如您所期望的那样,只需将其更改为:

reverse(n1);

答案 1 :(得分:0)

这是错误的部分:

void reverse(unsigned long *n1) {
  ....
  reverse(*n1);
}

反向需要一个指针,你提供一个值(解引用指针)

答案 2 :(得分:0)

您需要将每个继续(例如传递给函数)运行到sum

unsigned long reverse_aux(unsigned long n, unsigned long sum){
    return n > 0 ? reverse_aux(n / 10, sum * 10 + n % 10) : sum;
}

void reverse(unsigned long *n1) {
    *n1 = reverse_aux(*n1, 0);
}