【发布时间】:2016-06-01 03:50:05
【问题描述】:
# include <stdio.h>
void mystery (int *ptra, int *ptrb) {
int *temp;
temp = ptrb;
ptrb =ptra;
ptra = temp;
}
int main () {
int a = 2016, b=0, c= 4, d = 42;
mystery (&a, &b);
if (a < c)
mystery (&c, &a);
mystery (&a, &d);
print f("%d\n", a);
}
我的尝试:
a 和 d 不会交换,因为函数神秘()不会改变值,而是函数本地的指针。
请您正式解释一下。
mystery的工作原理如何?
【问题讨论】:
-
我正要回答。但“以正式方式”是什么意思?
-
它不会直接对您的指针值做任何事情,它会暂时更改指针地址的副本,然后在函数返回时恢复值。
-
编译器会推断该函数没有任何意义并完全优化掉它。
-
此外,您不是在“查看”指针,而是打印
a的值。那么你期望你的函数会改变变量地址吗? -
这个“谜团”至少有 2 个重复项。
标签: c pointers parameter-passing