在C中使用memset()的最佳技巧

时间:2012-03-21 14:35:12

标签: c

#define MAX 100

struct bs{
 int ab;
 int ac;
}be;
struct s{
 be b;
 int c;
 int d;
 int e;
}fe;

int a[MAX];
fe f;

技术1

f.b.ab = a;
memset(&a,0,sizeof(a));
f.b.ac = MAX;

技术2

f.b.ab = a;
f.b.ac = MAX;
memset(&a,0,sizeof(a));

技术3

memset(&a,0,sizeof(a));
f.b.ab = a;
f.b.ac = MAX;

这是最好的技术,为什么?

3 个答案:

答案 0 :(得分:1)

技术3:

memset(&a,0,sizeof(a));
f.b.ab = a;
f.b.ac = MAX;

因为只有一个 a来电,fb.b.abmemset()都会有清晰的记忆。您可能希望的任何其他类型的优化都是微不足道的。

答案 1 :(得分:1)

以上都不是。最好的是:

int a[MAX] = { 0 };
fe f = { .b.ab = a, .b.ac = MAX };

答案 2 :(得分:0)

无。你可能意味着一开始就是memset(a,0,sizeof(a));

a是一个在该上下文中转换为指针的数组,不需要获取地址。 (C FAQ提供了有关数组和指针的更多信息。)

然后对于其余部分,你应该在进一步修改之前修改你的基本知识

struct s{
 be b;
 int c;
 int d;
 int e;
}fe;


fe f;

此处结构类型为struct sfe是该类型的变量。所以这里的最后一行毫无意义。