使用C的数组元素中出现意外结果

使用C的数组元素中出现意外结果,c,arrays,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)

如果数组位置等于
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);
    }
}
#包括
int替换_和_和(int*a,int len)
{
int sum=0,i;
对于(i=0;i<5;i++)
{
如果(i==3)
{
a[i]=128;
}
}
printf(“%d\n”,*a);
返回0;
}
int main()
{
int arr[]={0,0,2,0,0};
int j=5,i;
对于(i=0;i<5;i++)
{
替换_和_和(&arr[i],j);
}
}

您只需要像下面这样调用

int main(){

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

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

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

{
if(i==2)//注意它的索引2,而不是3
替换_和_总和(&arr[i]);
}

您有两个
循环,它们不能很好地配合使用。移除其中一个。例如:

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]);
    }
}
intmain()
{
int arr[]={0,0,2,0,0};
int j=5;
替换_和_总和(arr,j);
对于(int i=0;i<5;i++)
{
printf(“%d\n”,a[i]);
}
}

注意,我将
printf
移动到
main
。您现有的程序非常奇怪。

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

一个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);
}
#包括
int替换_和_和(int*a,int len){
int sum=0,i;
对于(i=0;i

5
替换为
len
否则参数和最后一个
printf()
的要点是没有意义的,因为它只打印第一个元素的值

无论何时发送数组的单个值,如果需要(例如在您的情况下),都可以将发送其索引作为一种习惯

 #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);
    }
}
#包括
int替换_和_和(int*a,int i)
{
如果(i==3)
{
*a=128;
}
printf(“%d\n”,*a);
返回0;
}
int main()
{
int arr[]={0,0,2,0,0};
int i;
对于(i=0;i<5;i++)
{
替换_和_总和(&arr[i],i);
}
}

substitute_和_sum
中的循环超出了数组的边界,因为您在不同的索引处给它数组,而不是数组的开头。
 #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);
    }
}