当将指向长整数的指针作为函数参数传递时,我收到以下警告消息。
警告:与指针转换不兼容的整数传递' 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;
}
答案 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);
}