【问题标题】:Can't Reset array to 0无法将数组重置为 0
【发布时间】:2013-11-21 18:50:01
【问题描述】:

它没有把所有的数组都设为 0,我找不到为什么请帮忙 arr_temp2中的最后一个数字是垃圾,但它前面的数字是0,而i在倒数第二个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;
 }

【问题讨论】:

  • 我将显示的代码粘贴到一个框架程序中,运行它,并在第三个循环终止后检查调试器中的数组。所有三个都正确填充了零。您的问题不在于显示的代码。

标签: c arrays reset


【解决方案1】:

您可能想改用memset

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

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

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

【讨论】:

    【解决方案2】:

    要将数组的所有元素初始化为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 和无符号类型可能很危险。

    【讨论】:

    • 我不明白你在说什么。你能改写你的话吗?
    • 我认为变长数组不应该被初始化指定。
    • @BLUEPIXY;你救了我伙计:)。这是一个错误。 O__o
    • @user3010770;编辑了我的答案。
    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多