0

我的老师今天在编程课上给了我们一个问题,我不明白他是怎么得到答案的。我希望有人能给我解释一下。我们基本上必须显示程序输出是什么,但是我对如何获得问题的答案有些困惑。问题如下:

#include <stdio.h>
    void  do_something (int , int * );

    int main (void)
    {
        int first = 1, second = 2 ;
        do_something(second, &first);
        printf("%4d%4d\n", first, second);
        return (0);
    }

    void  do_something (int thisp, int *that)
    {
        int the_other;
        the_other = 5;
        thisp = 2 + the_other;
        *that = the_other * thisp;
        return;
    }

回答

   35 and 2
4

2 回答 2

3

该函数do_something包含 2 个参数。

  1. 普通整数(thisp)
  2. 指向整数的指针。(那)

你的老师要你学习的是,按值传递和按地址传递。

在按值传递中,原始值不会改变。这是因为在给出的示例中。变量的值second是复制thisp变量。

在按地址传递中,可以在函数内修改原始值。这是因为,指针that指向变量的位置first。因此,如果 的值that发生变化, 的值first也会发生变化。

这就是为什么first输出中的值会发生变化,而 的值second不受影响。

于 2013-10-23T10:40:11.830 回答
1
thisp = 2 + the_other;
*that = the_other * thisp;

方法:

thisp = 2 + 5
*that = 5 * 7

that包含first在 main 中的地址,它被覆盖do_something为 35。Second仍然是 2。

于 2013-10-23T10:40:02.677 回答