在哪里声明我的数组哪个更好?

时间:2015-03-12 05:16:59

标签: c

我的情况是

int main()
{
   if(some_condition)
   {
      //some code
   }
   else
   {
      char *a[] = { "","",...};
      char b[size] = {};
   }

   if(some_other_condition)
   {
     // some code
   }
   else
   {
      char *a[] = { "","",...};
      char b[size1] = {};
   }
}

所以我的问题是

我需要如上所示的指针数组和整数数组,并且在我的函数中有多个这样的if()else个案例。那么哪种方法更好呢?截至目前,我已将我的数组放在需要的位置,如上所示。

将所有内容放在函数开头并在需要时使用它们的另一种选择。

int main()
{
   char *a[some_big_size];
   char b[size_big];

   if()
   {
      //some_code
   }
   else
   {
      for(i=0;i<n;i++)
      {
         a[i] = malloc(len);
         strlcpy(a[i],"string",len);
      }
      for(i=0;i<n;i++)
      {
         b[i] = val;
      }
   }
}

请告诉我以上哪两个选项?我已经了解到declare variables when needed所以我想知道你们的想法。

是否有不同的方法来实现这一目标?

3 个答案:

答案 0 :(得分:1)

我相信你的第一个代码示例更好。声明自定义大小的数组将比声明单个“一刀切”数组更容易捕获越界错误。一个小小的好处是你只需要在真正需要的时候分配内存,但你的阵列必须非常重要。

答案 1 :(得分:0)

我可以想到以下条件:

  1. 如果不同else块中的数组引用相同的内存: 像在后一种情况下那样声明它们一次。

  2. 如果不同else块中的数组引用内存中的不同结构:
    一个。如果要在各自的else区块之外使用它们,则声明一次 湾如果它们的范围仅限于该块,则在每个else块中以不同方式声明它们!

答案 2 :(得分:0)

要有条件地分配堆栈变量alloca()应该使用:

char **a = (char **)alloca(sizeof(char *) * (some_condition ? size1 : size2));

在堆栈上分配内存时,不需要free()或其他任何内容。

P.S。如果实际代码对于所有条件大致相同,那么最好不要有多个ifelse - 只有?:alloca运算符。< / p>

但如果它根据some_condition的不同而不同,那么最好有完全不同的子程序来独立解决任务。