【发布时间】:2015-06-19 08:04:35
【问题描述】:
我有一个结构,我将其作为常量指针传递给函数,我的问题如下:函数 updatedFields 的这两个实现之间存在差异:
typedef struct
{
int spec[100];
int spec1[200];
int spec2[200];
int spec3[500];
int spec4[100];
int spec5[700];
float value[100];
char desc[1000]:
}t_product;
void updateFields_1(t_product const* context)
{
int i,buffer[1500];
int * pt_int;
pt_int = (int*)context->spec1;
for(i = 0; i < 200; i++)
{
buffer[i] = pt_int[i];
}
pt_int = (int*)context->spec3;
for(i = 0; i < 500; i++)
{
buffer[i] = pt_int[i];
}
...
}
void updateFields_2(t_product const* context)
{
int i,buffer[1500];
for(i = 0; i < 200; i++)
{
buffer[i] = context->spec1[i];
}
for(i = 0; i < 500; i++)
{
buffer[i] = context->spec3[i];
}
...
}
int main(void)
{
t_product prod;
/* Initialisation of the structure */
...
updateField(&prod);
}
我的意思是,使用指向结构成员的指针(指向数组的指针)而不是直接访问结构成员有任何好处。
这可能是一个愚蠢的问题,但我不知道结构成员的访问是否“花费”更多操作。
【问题讨论】:
-
请放弃
pt_int = (int*)context->spec3;的演员表。类型已经兼容,无偿转换可以隐藏错误。 -
您真的需要
for循环吗?我觉得,对于单个成员(数组类型),你可以直接去memcpy(),不是吗? -
它是 int 主要的,而不是 void 主要的。我冒昧地纠正它。
标签: c