我指定"非连续",因为我知道在数字集是连续的情况下,我可以使用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’ed数组的情况下重新分配数组,从而导致内存泄漏。
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("%in", reversed[i]);
free(reversed);
return 0;
}
既然您拥有的值已经处于类似数组的状态,为什么不把它们放在(临时)本地数组中,然后复制呢?
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的建议相同,但可读性略高。