【发布时间】:2013-04-07 19:30:52
【问题描述】:
鉴于此 C 代码:
int x=12,y=10;
void tswap(int pa, int pb) {
int tmp;
tmp=pa;
pa=pb;
pb=tmp;
x=x+pa;
x=x-pb;
y++;
printf("%d %d %d %d\n",pa,pb,x,y);
}
int main() {
int a=4;
tswap(x,a);
printf("%d %d %d\n",x,y,a);
return 0;
}
如果 C 使用引用调用,我必须弄清楚它会打印什么。
这是我的期望。
首先
x=12 y=10 和 a=4
after tswap(12,4):
pa=x=12 pb=a=4
after tmp=pa:
tmp=pa=x=12
-----------
after pa=pb:
tmp=x=12
pa=pb=a=4
-------------
after pb=tmp:
pb=tmp=x=12
pa=a=4
after x=x+pa
x=16
------------
and after x=x-pb and y++
x=4,y=11
所以我认为 x=4, pb=12, pa=4, y=11;但答案是 -4 12 -4 11。我错在哪里?
【问题讨论】:
-
C 中没有引用调用。要找出代码的作用,只需编译并运行它。
-
@OliCharlesworth 我知道在 C 中没有引用调用,而且在顶部也有说。" c 代码喜欢" 所以,想想一个与 c 类似的语法并具有调用的代码-参考
-
@OliCharlesworth 你会怎么称呼
int a=1, b=2; tswap(&a, &b);和void tswap(int* pa, int* pb){...}? -
@A4L 我认为你不能用 ANSI C 做到这一点,但请集中我的问题。
-
@A4L:可能是地址传递。 (不过,我很欣赏没有明确的定义。)
标签: c binding parameter-passing