如何使用指针算法反转数组中每个数字的数字

时间:2016-08-10 19:57:25

标签: c arrays pointers

我试图在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;
}

2 个答案:

答案 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--;
   }
 }