c - 我的 C 代码的输出比我预期的值多 1。为什么?

标签 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

最佳答案

我刚刚发现我做错了什么。我只需要将 b 加 2 即可获得 j 值,因为 function1 表示返回(b+2)。 info[a] 的值不是实际输出。

关于c - 我的 C 代码的输出比我预期的值多 1。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540142/

相关文章:

c - 了解进程是否已被 exec() 调用

c - jmp 到内联 AVR C 中的地址

Javascript - 使用正则表达式拆分字符串

c++ - 如何错误处理命令行参数?

javascript - 将更改后的函数分配给另一个变量并获得具有相同名称的不同主体

c# - unsigned long 和 unsigned int 之间有什么区别?这两种类型在 C# 中应如何编码(marshal)?

C 中的命令行参数

java - 我可以在 String 变量中存储特殊符号吗?

javascript - 创建出现在字符串中且不带空格的单词列表 - 考虑单词出现多次的情况

javascript - 写一个函数在javascript中查找数组的最大值/最小值