C中的指针,不在下面的代码中

时间:2017-11-02 02:23:46

标签: c pointers

以下代码的输出应该是什么? 我不明白* Y--做什么。如果有人能解释什么* Y在F1中做到这么奇怪。提前谢谢。

int F1(int , int *);
int A = 3;
int B = 7;
int C = 4; 
int D = 2;

void main(void)
{

    A = F1 (C, &D);
    printf("\n%d %d %d %d", A, B, C, D);
    C = 3;
    C = F1 (A, &C);
    printf("\n%d %d %d %d", A, B, C, D);
}

int F1(int X, int *Y)
{
    int A;
    A = X * *Y;
    C++;
    B += *Y;
    printf("\n%d %d %d %d", A, B, C, D);
    *Y--;
    return (C);
}
使用CodeBlocks

输出为:

8 9 5 2
5 9 5 2
15 13 4 2
5 13 4 2

但我不明白为什么13,如果我有B = B + * Y ... B = 12(?)

1 个答案:

答案 0 :(得分:0)

在调用C = F1(A, &C) ;之前

A = 5,B = 9,C = 3,D = 2

当我们拨打F1(A, &C)时,请看这里我们正在传递 C 的地址,现在Y实际上是指 C

函数调用中的指令执行

local A variable = 5 * 3( Y指向的值

C ++,Global C现在变为4;

B + = * Y(Y指向的值。由于之前的C,这将是4 ++)

所以B = 9 + 4 。这就是13号排在第三线的原因。