簡體   English   中英

[C]僅指針的反向數組

[英][C]Reverse array with only pointers

我試圖僅使用指針來反轉數組。 該程序運行時沒有任何錯誤,但不會反轉數組。 我的代碼有什么問題?

#include <stdio.h>

#define SIZE 10
void arrayReverseOutput(int * arr);
void arrayInput(int * arr);
void printArray(int * arr);

int main(void)
{
    int arr[SIZE] = { 0 };
    arrayInput(arr);
    arrayReverseOutput(arr);
    printArray(arr);

    system("PAUSE");
    return 0;
}

void arrayInput(int * arr){
    int i = 0;
    for (i = 0; i < SIZE; i++){
        scanf("%d",(arr+i));
    }
}

void arrayReverseOutput(int * arr){
    int i = 0;
    int k = SIZE-1;
    int temp = 0;


    for (i = 0; i < SIZE; i++){
        temp = *(arr+i);
        *(arr+i) = *(arr + k);
        *(arr + k) = temp;
        k--;
    }
}

void printArray(int * arr){
    int i = 0;
    for (i = 0; i < SIZE; i++){
        printf("%d ", *(arr+i));
    }
}

問題是,您實際上將陣列反轉了兩次 ,否定了通過交換位置實現的任何更改。

交換元素時僅遍歷數組的一半,例如

 for (i = 0; i < SIZE/2; i++)

您可以使用2個指針

void arrayReverseOutput(int *head, int *tail)
{
    int temp = 0;

    do
    {
        temp = *tail;
        *tail = *head;
        *head = temp;
    }
    while (head++ < tail--);
}

完整的代碼

#include <stdio.h>

#define SIZE 10
void arrayReverseOutput(int *head, int *tail);
void arrayInput(int * arr);
void printArray(int * arr);

int main(void)
{
    int arr[SIZE] = { 0 };
    arrayInput(arr);
    arrayReverseOutput(arr, &arr[SIZE - 1]);
    printArray(arr);

    return 0;
}

void arrayInput(int * arr)
{
    int i = 0;
    for (i = 0; i < SIZE; i++)
    {
        scanf("%d", (arr + i));
    }
}

void arrayReverseOutput(int *head, int *tail)
{
    int temp = 0;

    do
    {
        temp = *tail;
        *tail = *head;
        *head = temp;
    }
    while (head++ < tail--);
}

void printArray(int * arr)
{
    int i = 0;
    for (i = 0; i < SIZE; i++)
    {
        printf("%d ", *(arr + i));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM