【问题标题】:unexpected result in array element with C使用 C 的数组元素中出现意外结果
【发布时间】:2013-09-11 17:42:25
【问题描述】:

如果数组位置等于3,我正在尝试插入一个整数,但不幸的是,当我打印我的数组a 时,我得到了这样的荒谬结果:

   0
   0
   2

而预期的结果是:

   0
   0
   128
   0
   0

我的代码是:

#include<stdio.h>
int substitute_and_sum(int *a, int len)
{

    int sum = 0, i;
    for (i = 0; i < 5; i++)
    {
        if (i == 3)
        {
            a[i] = 128;
        }
    }

    printf("%d\n", *a);
    return 0;
}

int main()
{

    int arr[] = { 0, 0, 2, 0, 0 };
    int j = 5, i;

    for (i = 0; i < 5; i++)
    {
        substitute_and_sum(&arr[i], j);
    }
}

【问题讨论】:

  • substitute_and_sum 中的循环超出了数组的边界,因为您在不同的索引处为其提供了数组,而不是数组的开头。

标签: c arrays


【解决方案1】:

您有两个 for 循环不能很好地配合使用。删除一个或另一个。例如:

int main()
{

    int arr[] = { 0, 0, 2, 0, 0 };
    int j = 5;

    substitute_and_sum(arr, j);
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n", a[i]);
    }
}

请注意,我将 printf 移至 main。你现有的程序很奇怪。

【讨论】:

    【解决方案2】:

    你只需要像下面这样调用

    int main(){
    
     int arr[]={0,0,2,0,0};
     int j=5,i;
    
     //for(i=0;i<5;i++)
     //{
      substitute_and_sum(arr,j);
     //}
    }
    

    或者使用:-

    void substitute_and_sum(int *a)
    {   
        *a = 128;
    }
    

    main

    for (i = 0; i < 5; i++)
    {
        if (i == 2) //Note its index 2, not 3
        substitute_and_sum(&arr[i]);
    }
    

    【讨论】:

      【解决方案3】:

      一个for循环就够了

      #include<stdio.h>
      int substitute_and_sum(int* a, int len) {
      
      int sum =0, i; 
      for(i=0;i< len;i++)
      {
       if(i==3)
              { 
           a[i] = 128;
          }
       printf("%d\n" , a[i]);  
      }
      
       return 0;
      }
      
       int main(){
      
       int arr[]={0,0,2,0,0};
       int j=5,i;
        substitute_and_sum(&arr[i],j);
      }
      

      5 替换为len 否则参数的意义何在,最后一个printf() 毫无意义,因为它只打印第一个元素的值;

      【讨论】:

        【解决方案4】:

        您在两个函数中循环遍历数组,只需在其中一个函数中执行即可。

        【讨论】:

          【解决方案5】:

          这很有效,每当您发送数组的单个值时,请养成发送其索引的习惯,如果需要,例如像您这样的情况。

           #include<stdio.h>
              int substitute_and_sum(int *a, int i)
              {
          
                      if (i == 3)
          
          
           {
                      *a = 128;
                  }
              printf("%d\n", *a);
              return 0;
          }
          
          int main()
          {
          
              int arr[] = { 0, 0, 2, 0, 0 };
              int  i;
          
              for (i = 0; i < 5; i++)
              {
                  substitute_and_sum(&arr[i], i);
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-04
            • 1970-01-01
            • 1970-01-01
            • 2013-11-07
            • 1970-01-01
            • 2012-01-27
            相关资源
            最近更新 更多