0

我指定“非顺序”是因为我知道在数字集是顺序的情况下我可以使用 for 循环来填充值。但是我不知道当值没有关系时如何分配值。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>  // edited in for the use of memcpy


int main()
{
    static const size_t kBufferSize = 6;

    int *nums = malloc(kBufferSize * sizeof(int));

我知道这不起作用:

    //nums[] = { 4, 8, 15, 16, 23, 42 }; incorrect
    memcpy(nums, (int []){ 4, 8, 15, 16, 23, 42 }, kBufferSize * sizeof(int)); // corrected

因为我在不使用 malloc 的数组的情况下重新分配数组,从而产生内存泄漏。

    int *reversed = malloc(kBufferSize * sizeof(int));

    for (int i = 0; i < kBufferSize; i++)
    //  reversed[4 - i] = nums[i];   incorrect
        reversed[5 - i] = nums[i]; //corrected
    free(nums);

    for (int i = 0; i < kBufferSize; i++)
        printf("%i\n", reversed[i]);    
    free(reversed);
    return 0;
}
4

1 回答 1

2

既然您拥有的值已经处于类似数组的状态,为什么不将它们放入(临时)本地数组然后复制?

static const size_t kBufferSize = 6;

int *nums = malloc(kBufferSize * sizeof(int));

{
    int data[] = { 4, 8, 15, 16, 23, 42 };
    memcpy(nums, data, sizeof(data));
}

这实际上与@Grijesh Chauhan 的建议相同,但更具可读性。

于 2013-08-24T16:36:45.200 回答