带有C的数组元素出现意外结果

时间:2013-09-11 17:42:25

标签: c arrays

我试图插入一个整数,如果数组位置等于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);
    }
}

5 个答案:

答案 0 :(得分:3)

你只需要像下面这样打电话

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]);
}

答案 1 :(得分:3)

你有两个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 :(得分:1)

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

答案 3 :(得分:1)

一个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 :(得分:1)

这是有效的,每当你发送数组的单个值时,就养成发送索引的习惯,如果需要,例如像你的那样。

 #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);
    }
}