我正在跟踪代码,但我不了解如何计算值。我的问题是代码旁边的注释。
我正在跟踪代码,并且我理解除2之外的所有部分。我在下面发布了这2部分。如果有人可以帮助我,我将感到非常高兴。
LMEM->PCCRMR = 0;
答案 0 :(得分:0)
在第一个printf
中,x == 2
因为第一次调用function1
时是指向*m
的指针,所以您将其分配给所指向的位置通过x
(即m
的位置)x
。
在第二个*m + n == x + x == 1 + 1 == 2
中,printf
是因为在y == 8
中返回的值增加了2(所以function2
),但没有更新3 + 2 == 5
,所以在y
将function1
的结果值与function2
的旧值(y
)相加。 3 + 5 == 8
也返回该值,function1
也返回。
答案 1 :(得分:0)
因此,在function1内部:
int function1(int *m, int n) {
*m = *m + n;
return(*m);
} /*
... */
y = function1(xptr,x);
n
持有x
值的副本,m
持有值xptr
的副本,该值是x
的地址。*m
是指m
持有的地址的内容*m = *m + n
那是“分配给x
地址的内容:x
地址的内容,加上x
的值”。
x
地址的内容(也就是它的值)为1。因此,我们为持有x
值的地址内容分配1 +1。