我的C代码的输出比我期望的值大1。为什么?

时间:2019-04-05 16:52:30

标签: c string function pointers

我正在跟踪代码,但是我期望的最终输出比实际输出小1。函数的返回也使我感到困惑。我不了解function1中的return(b + 2)意味着什么。我应该在哪里添加2?为了清楚起见,我将输出放在注释中。

#include <stdio.h>
int function1(int info[], int size, int a, int b)
{
   //info:3 5 7 9 11 13 15 17 //size=9 //a=i->1..9 //b=(i-1)*(i-1)
    if (a<5)//1 3 
    {
        info[a]=b-1;//-1 3
        //b=0 4 
        //a=1 ->-1 //a=3 ->3 
        printf("info[%d]=%d\n",a,info[a]);
    }
    else //5 7 9
    {
        info[a]=b+1;//info[a]=17 37 65
        //b=16 36 64 
        //a=5 ->17 //a=7 ->37 //a=9 ->65    
        printf("info[%d]=%d\n",a,info[a]);
    }
return(b+2); //what's happening here?
}
int main()
{
    int info[9],i,j,a,b;
    info[0]=1;

    for (i=1; i<9; i++) 
        info[i]=info[i-1]+2; // 3 5 7 9 11 13 15 17
    i=1;
    while (i<=9)
    {
        j = function1(info,9, i,(i-1)*(i-1));
        printf("while:i=%d j=%d\n\n",i,j); //1 2//3 6//5 18//7 38//9 66
        i = i + 2;//1 3 5 7 9
    }
    printf("\n");
}
Expected:
info[1]=-1
while:i=1 j=-1

info[3]=3
while:i=3 j=3

info[5]=17
while:i=5 j=17

info[7]=37
while:i=7 j=37

info[9]=65
while:i=9 j=65

Actual:
info[1]=-1
while:i=1 j=2

info[3]=3
while:i=3 j=6

info[5]=17
while:i=5 j=18

info[7]=37
while:i=7 j=38

info[9]=65
while:i=9 j=66

1 个答案:

答案 0 :(得分:0)

我只是想出我做错了什么。我只需要在b上加上2即可得到j值,因为function1表示return(b + 2)。 info [a]的值不是实际输出。