无法将数组重置为0

时间:2013-11-21 18:50:02

标签: c arrays reset

它没有使所有数组0和我无法找到为什么帮助请  arr_temp2中的最后一个数字是垃圾,但它之前的数字是0,但我在倒数第二个27

big=10 small=7  我只能使用基本功能(for,if,while)

 int arr_temp[big_size+small_size];
 int arr_temp1[(big_size+small_size+2)];
 int arr_temp2[(big_size+small_size+1)];

 for (j=0; j<big_size+small_size; j++)
 {
    arr_temp[j]=0;
 }

  for (t=0;t<(sizeof(arr_temp1)/sizeof(int));++t)
  {
     arr_temp1[t]=0;
  } 


 for (z=0;z<(sizeof(arr_temp2)/sizeof(int)); ++z)
 {
    arr_temp2[z]=0;
 }

2 个答案:

答案 0 :(得分:3)

您可能希望改为使用memset

memset(arr_temp1, 0, sizeof(arr_temp1));

或者如果你将数组传递给一个函数,那么它已经衰减了一个指针:

memset(arr_temp1, 0, sizeof(arr_temp1[0]) * (big_size+small_size+2));

答案 1 :(得分:3)

要将数组的所有元素初始化为0,您可以将其简单地作为

int arr_temp[big_size+small_size] = {0};
int arr_temp1[(big_size+small_size+2)] = {0};
int arr_temp2[(big_size+small_size+1)] = {0};  

请注意,我假设你知道在声明这些数组之前初始化了可变长度数组(在C99中允许)和big_sizesmall_size是VLA的必要条件。

我之前的回答是错误的。不能以这种方式初始化VLA。

你做得对。没问题。我用代码

测试了它
#include<stdio.h>

int main()
{
int big_size = 4;
    int small_size = 2;

    int arr_temp[big_size+small_size];
    int arr_temp1[(big_size+small_size+2)];
    int arr_temp2[(big_size+small_size+1)];

     for (int j=0; j < big_size+small_size; j++)
     {
         arr_temp[j]=0;
         printf("%d", arr_temp[j]);
     }
     printf("\n\n");

     for (int t=0; t < (signed)(sizeof(arr_temp1)/sizeof(int)); ++t)
     {
         arr_temp1[t]=0;
         printf("%d", arr_temp1[t]);
     }
     printf("\n\n");

     for (int z=0;z<(signed)(sizeof(arr_temp2)/sizeof(int)); ++z)
     {
         arr_temp2[z]=0;
         printf("%d", arr_temp2[z]);
     }
     return 0;
}  

获取输出

000000

00000000

0000000

我将sizeof运算符与unsigned一起投放,因为它返回size_t(无符号)类型。比较signed和无符号类型可能很危险。