第五章函数pta练习


fun(int a, int b, int d)
{   d= a * b;  }
int main(void)
{
      int c;

      fun(2, 3, c);
      printf(“%d\n”, c);

      return 0;
}

c最后输出的值为0,fun函数中的abd变量都是局部变量只在函数内部有效,其中计算的值也没有返回return ,所以c的值最终不受影响,亦然还是其初始值0 望采纳

这段代码有一个问题,即 c 在调用 fun 函数之前没有被初始化,因此 fun 函数中对 d 的修改实际上是没有意义的。

修复这个问题的一种方式是将 c 初始化为 0,如下所示:


int main(void)
{
      int c = 0;

      fun(2, 3, c);
      printf("%d\n", c);

      return 0;
}

这样,当调用 fun 函数时,c 的初始值就是 0,而在 fun 函数中计算出的 a * b 的结果将会被赋值给 c,最终输出的结果也会是正确的。

该回答引用ChatGPT

这段代码定义了一个名为 fun 的函数,该函数接受三个整数参数 a、b 和 d,其中 d 的值被函数内部的语句 d = a * b; 修改为 a 和 b 的乘积。

在 main 函数中,定义了一个整型变量 c。然后调用函数 fun,传入参数 2、3 和 c。在 fun 函数内部,变量 d 的值被修改为 2 和 3 的乘积 6,但这个值并没有被传回 main 函数中的变量 c。因此,main 函数中的 printf 语句输出的值是未初始化的变量 c 的值,结果是不确定的。

如果要使程序能够正确输出乘积 6,需要将函数 fun 的参数 d 改为指针类型,并在函数中修改指针所指向的值。修改后的代码如下:

void fun(int a, int b, int *d) {
    *d = a * b;
}

int main(void) {
    int c;
    fun(2, 3, &c);
    printf("%d\n", c);
    return 0;
}

在上面的代码中,将函数 fun 的参数 d 改为指针类型 int *d,并在函数内部使用 *d 访问指针所指向的变量。在 main 函数中,将变量 c 的地址 &c 传入函数 fun 中,使得函数 fun 可以修改变量 c 的值。函数执行完成后,main 函数中的 printf 语句输出 6,即 2 和 3 的乘积。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^