Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程?使用指针_C_Syntax - Fatal编程技术网

C编程?使用指针

C编程?使用指针,c,syntax,C,Syntax,我的老师今天在编程课上给了我们一个问题,我不明白他是怎么得到答案的。我希望有人能给我解释一下。我们基本上必须展示程序的输出是什么,但是对于如何得到问题的答案,我有点困惑。问题如下: #include <stdio.h> void do_something (int , int * ); int main (void) { int first = 1, second = 2 ; do_something(second, &am

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

#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;
    }
指:

thisp = 2 + 5
*that = 5 * 7
主要包含
第一个
的地址,该地址在
中被覆盖为35<代码>秒
仍为2

指:

thisp = 2 + 5
*that = 5 * 7

主要包含
第一个
的地址,该地址在
中被覆盖为35<代码>秒
仍为2

函数
do\u something
包含两个参数

  • 正整数(thisp)
  • 指向整数的指针。(即)
  • 您的老师希望您学习的是,按值传递按地址传递。

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

    在传递地址中,可以在函数内修改原始值。 这是因为,
    指向变量
    第一个位置的指针
    。因此,如果更改了
    值,则
    first
    的值也将更改


    这就是为什么输出中第一个
    的值发生变化,第二个
    的值不受影响。

    函数
    do\u something
    包含两个参数

  • 正整数(thisp)
  • 指向整数的指针。(即)
  • 您的老师希望您学习的是,按值传递按地址传递。

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

    在传递地址中,可以在函数内修改原始值。 这是因为,
    指向变量
    第一个位置的指针
    。因此,如果更改了
    值,则
    first
    的值也将更改


    这就是为什么
    第一个
    的值在输出中被更改,而
    第二个
    的值不受影响。

    哪一行您不理解?使用调试器(如果您知道如何使用它,可能通过IDE),一步一步地执行程序,并检查发生了什么。或者插入打印命令。@Nick:我想函数定义将是
    void do\u somthing(int this,int*thatp)不是相反。基本上把我搞糊涂的是*,我不确定他是如何得出35和2的答案的。@haccks。。。或者看经典:(from:)哪一行你不懂?使用调试器(如果你知道如何使用它,可能是通过IDE),一步一步地执行程序,并检查发生了什么。或者插入打印命令。@Nick:我想函数定义将是
    void do\u somthing(int this,int*thatp)不是相反。基本上把我搞糊涂的是*,我不确定他是如何得出35和2的答案的。@haccks。。。或者观看经典:(from:)在
    C
    中没有
    passbyreference
    。对象始终创建一个副本。错误的解释。对不起,我指的是通过地址。在
    C
    中没有
    passbyreference
    。对象始终创建一个副本。错误的解释。对不起,我指的是路过的地址。非常感谢,这正是我要找的。谢谢你的帮助。非常感谢,这正是我想要的。谢谢你的帮助。
    thisp = 2 + 5
    *that = 5 * 7