C/C++ 利用指针进行数组元素的逆转(reverse)

一个题目:
Fill_array()函数将一个double数组和长度作为参数,将输入的函数存储在数组中。当用户将数组填满或输入非数字时,输入停止,并返回输入了多少个数字。
Show_array()输出一个数组。
Reverse_array()将一个double数组和长度作为参数,将存储的值进行反转(要求反转其他元素,但保留第一项和最后一项)。

要求输出,数组的录入,展示数组,反转数组,展示反转后的数组。

最后一个Reverse()函数要求过于简单,今天使用指针的方式进行实现。

这是一个利用指针反转元素的函数体(所有的元素进行反转)

void Reverse_array(double* arrbegin, double * arrend)
{
    double temp;
    while (arrbegin < arrend)
    {
        temp = *arrbegin;
        *arrbegin = *arrend;
        *arrend = temp;
        arrbegin++;
        arrend--;
    }    
}

逻辑十分简单,arrbegin指向数组的第一项元素,arrend指向元素的最后一个元素。当arrbegin < arrend时,将两项元素进行交换。
下来是arrbegin与arrend的定义

   // 数组名相当于第一项元素的地址
   double* arrbegin = array; 
   // 第一项的地址(下标为0) + 数组的大小 - 1 (数组的大小 - 1 为数组的最后一项元素)
   double* arrend = arrbegin + size - 1; 

那么如果要保留第一项和最后一项呢?
下来是arrbegin与arrend的定义

   // 将第二项元素的地址传给arrbegin
   double* arrbegin = &array[1]; 
   // 第二项的地址(下标为1) + 数组的大小 - 3(arrend 指向数组的最后一项元素)
   // 假设一共有5个元素,画图可以得到表达式
   double* arrend = arrbegin + size - 3; 

题目的实现:

#include 
using namespace std;

int Fill_array(double[], int);
void Show_array(double[], int);
void Reverse_array(double*, double*);

int main()
{
    int size;
    double array[5];
    size = Fill_array(array, 5);
    Show_array(array, size);
    double* arrbegin = &array[1];
    double* arrend = arrbegin + size - 3;
    Reverse_array(arrbegin, arrend, size);
    Show_array(array, size);
    system("pause");
    return 0;
}

//Fill_array()函数的定义
int Fill_array(double arr[], int n)
{
    int counter = 0;
    for (int i = 0; i < n; i++)
    {
        cout << "please enter a number #" << i + 1 << endl;
        cin >> arr[i];
        if (!cin)                                 //用户输入非数字则退出
        {
            cin.clear();
            while (cin.get() != '\n')    
            {
                continue;
            }
            break;
        }
        counter++;
    }
    return counter;
}

//Show_array()函数的定义
void Show_array(double arr[], int n)
{
    for (int i = 0; i < n; i++)
    {
    cout << arr[i] << ' ';
    }
    cout << endl;
}

//Reverse_array()函数的定义
void Reverse_array(double* arrbegin, double * arrend)
{
    double temp;
    while (arrbegin < arrend)
    {
        temp = *arrbegin;
        *arrbegin = *arrend;
        *arrend = temp;
        arrbegin++;
        arrend--;
    }    
}

你可能感兴趣的:(C/C++ 利用指针进行数组元素的逆转(reverse))