我试图复制到C中动态分配的数组(源数组可能会也可能不会动态分配。数组的第一个元素被正确复制,但其余部分则没有。可以告诉任何人我做错了什么?
我在这里调用方法:
vec3 tempVel = {
(float)rand()/(float)RAND_MAX * (2.0f * INIT_VELOCITY_DIMENSION_MAGNITUDE) - INIT_VELOCITY_DIMENSION_MAGNITUDE,
(float)rand()/(float)RAND_MAX * (2.0f * INIT_VELOCITY_DIMENSION_MAGNITUDE) - INIT_VELOCITY_DIMENSION_MAGNITUDE,
(float)rand()/(float)RAND_MAX * (2.0f * INIT_VELOCITY_DIMENSION_MAGNITUDE) - INIT_VELOCITY_DIMENSION_MAGNITUDE
};
thisBoid->velocity = copyArrays2(&tempVel, 3);
方法:
vec3* copyArrays2(vec3 *src, int len){
vec3 *tempArray = (vec3*)malloc(len*sizeof(vec3));
for(int i=0; i<len; i++){
*tempArray[i] = *src[i];
}
return tempArray;
}
打印&#39; tempVel&#39;的值在复制之前和这个&lt;&gt;速度&#39;之后给出以下输出:
{0.895216, -0.107424, 0.532019}
{0.895216, 10.000000, 0.500000}
答案 0 :(得分:1)
*tempArray[i]
是第i个vec3的第一个元素。
Operator precedence会对其进行评估*(tempArray[i])
,即tempArray[i][0]
。仅触摸每个vec3的第一个元素。如果vec3是伪装的普通数组,你将不得不在内循环中迭代它的元素。
示例代码,提供typedef float vec3[3];
:
for(int i=0; i<len; i++){
for(int ii=0; ii<3; ii++){
tempArray[i][ii] = src[i][ii];
}
}
顺便说一下,我想借此机会感谢iharob的建设性意见。