gpt4 book ai didi

c - 将值设置为数组(初始化后)

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:04 24 4
gpt4 key购买 nike

这似乎是一个简单的问题,但我无法理解它......

我想根据某些条件以最优雅的方式设置数组的元素。

这是我的非编译伪代码:

float*array=NULL;
switch(elements) {
case 1: array={1}; break;
case 2: array={7, 1}; break;
case 3: array={3, 2, -1}; break;
case 4: array={10, 20, 30, 40}; break;
default:break;
}

数组的大小是有限的,所以我可以做类似“float array[16];”的事情同样,但问题显然出在案例陈述中。

我真的不想做这样的事情:

case 2: array[0]=1; array[1]=2;

我当前的(笨拙的)实现是:

#define ARRAYCOPY(dest, src) for(int i=0;i<sizeof(src)/sizeof(*src);i++)dest[i]=src[i]
// ...
case 2: do {float*vec={1, 2}; ARRAYCOPY(array, vec); } while(0); break;

我正在使用 ARRAYCOPY 定义,因为 memcpy() 似乎不起作用。至少在做

float*vec={1, 2}; memcpy(array, vec, sizeof(vec)/sizeof(*vec);

没有向数组中填充任何值。

我想一定有更好的解决方案?

最佳答案

memcpy<string.h> 中发挥作用,这类似于您实现的 ARRAYCOPY .它复制给定大小的内存块,在您的情况下,此大小是数组中元素的数量 * 数组中元素的大小。

http://www.cplusplus.com/reference/clibrary/cstring/memcpy/

memcpy(destination_array, source_array, number_of_elements * size_of_element);

所以,你有

// let's allocate exactly as much space as is needed
float* array = (float*)malloc(elements * sizeof(float));

// and now copy the elements we want
switch(elements) {
case 1: memcpy(array, (float[]){1}, 1 * sizeof(float)); break;
case 2: memcpy(array, (float[]){1, 2}, 2 * sizeof(float)); break;
case 3: memcpy(array, (float[]){1, 2, 3}, 3 * sizeof(float)); break;
case 4: memcpy(array, (float[]){10, 20, 30, 40}, 4 * sizeof(float)); break;
default:break;
}

关于c - 将值设置为数组(初始化后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com