我试图在C中编写一个程序来反转数组中的所有数字,但它实际上并没有反转任何东西,所以我的数字没有变回。我猜我的指针有问题。
这是我的代码:
#include <stdio.h>
void reverse(int *n) {
int number = *n, number2 = 0;
while (number!=0) {
number2 *= 10;
number2 += number % 10;
number /= 10;
}
*n = number2;
}
void ReverseDigits(int *p, int n) {
int i = 0;
while (i < n) {
reverse(&p);
p++;
i++;
}
}
int main() {
int array[3] = {123, 456, 789}, i = 0;
while (i < 3) {
ReverseDigits(array, 3);
i++;
}
return 0;
}
答案 0 :(得分:1)
在ReverseDigits
中,变量p
是一个int指针。执行&p
时,您将获得指向int指针的指针。但是你的reverse
函数只需要一个int指针,所以你调用reverse
是错误的。只需做
reverse(p); // insteand of reverse(&p)
在main
中,你不应该在循环中调用ReverseDigits
,因为函数已经循环数组(即传递的元素数)。所以跳过while
并简单地执行:
int main() {
int array[3] = {123, 456, 789};
ReverseDigits(array, 3);
return 0;
}
答案 1 :(得分:0)
在我看来,你的reverse()
功能是&#34;既令人困惑,也一定是错误的。&#34; (嘿,不要亲自接受......)
这样一个函数可能怎么可以工作,而不是被告知,不仅 (数组),而且长是怎样的?你似乎在这里缺少一个参数。
一旦您在设计中解决了 问题,那么&#34;逆转&#34;数组只是一个交换&#34;交换&#34;算法中的第一个和最后一个元素是这样的:(伪代码!)
function reverse( array[], array_size) {
int i = 0;
int j = array_size - 1; // since zero-based
while (i < j) { // no need to use "<=" here"
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}