为什么printf输出值还是1,2(语言-c语言)

img


调试时为什么a-3不会参与运算,b被赋值后为什么y不会改变,怎样更改printf输出才为-2,4。求解惑。

a-3运算了,只是结果没地方存,丢了。
b赋值了,仅限于函数内,不会影响外面的值。即原来的x,y还是原来的值。
改为传变量的引用即地址,函数内修改这个地址的值,大概是这样:

fun(int *a, int *b) {
  *a = *a -3;
  *b = 4;
}

调用:fun(&x, &y)

你不是a=a-3

传值不修改原数据,传地址才会修改

你的函数时传值的方式,相当于复制一个值给到函数,而函数改变的值是你复制的值,应该使用传地址的方式,将地址传给函数,这样会减少内存拷贝,运算速度也会更快
代码:

void fun(int&a,int&b)
{
    a-=-3;
    b=4;
}

  • 以下回答由chatgpt基于相关博客总结生成:

    首先,问题出现的原因是因为在printf函数中,变量a的值没有参与运算,而变量b被赋值后,变量y却没有发生改变。此问题的解决需要对代码进行修改。

    1. 在C语言中,要输出变量a的值为1,可以使用以下代码:
    int a = 1;
    printf("a=%d\n", a);
    

    在这段代码中,"%d"是一个格式控制符,它表示输出一个十进制整数。通过使用"%d",我们可以将变量a的值输出为1。

    1. 要输出变量b的值为4,可以使用以下代码:
    int b = 2;
    int y = 2 * b;
    printf("y=%d\n", y);
    

    在这段代码中,我们首先给变量b赋值为2,然后通过将变量b乘以2来计算变量y的值,并将其输出为4。

    综上所述,要将printf函数的输出结果改为-2和4,可以使用以下代码:

    int a = -2;
    int b = 2;
    int y = 2 * b;
    printf("a=%d\n", a);
    printf("y=%d\n", y);
    

    在这段代码中,我们使用赋值操作符将变量a的值设置为-2,并将变量b乘以2来计算变量y的值。然后,我们分别使用"%d"格式控制符将变量a和y的值输出为-2和4。

    希望能够解答您的问题!如有其他问题,请随时提问。