簡體   English   中英

如何使用指針反轉數組?

[英]How can I reverse an array using pointers?

我正在嘗試編寫一個反轉數組的函數。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void * reverse(void * array, int length, size_t size) {
    void * temp = malloc(size);
    int s = 0;          // start
    int e = length - 1; // end
    const int halp = length / 2;
    for (; s < halp; s++) {
        memcpy(temp, (array + s), size);
        memcpy((array + (s * size)), (array + (e * size)), size);
        memcpy((array + (e * size)), temp, size);
        e--;
    }
    free(temp);
    return array;
}

int main(int argc, char * argv[]) {
    int array[] = {0, 1, 2, 3, 4};
    for (int i = 0; i < 5; i++) {
        printf("array[%d]: %d\n", i, array[i]);
    }
    printf("------------------------------------------\n");
    reverse(array, 5, sizeof(int));
    printf("------------------------------------------\n");
    for (int i = 0; i < 5; i++) {
        printf("array[%d]: %d\n", i, array[i]);
    }
}

結果:

array[0]: 0
array[1]: 1
array[2]: 2
array[3]: 3
array[4]: 4
------------------------------------------
------------------------------------------
array[0]: 4
array[1]: 3
array[2]: 2
array[3]: 16777216
array[4]: 0

為什么結果有意外值?

memcpy(temp, (array + s), size);

memcpy(temp, (array + s * size), size); // Note: s * size


經過測試,並且有效。

輸出:

array[0]: 0
array[1]: 1
array[2]: 2
array[3]: 3
array[4]: 4
------------------------------------------
------------------------------------------
array[0]: 4
array[1]: 3
array[2]: 2
array[3]: 1
array[4]: 0

暫無
暫無

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

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