c - 具有 passByName 参数传递范例的函数的输出

标签 c pass-by-name

我试图弄清楚这样的代码的输出是什么。顺便说一句,这不是一个真正的问题,一种理论问题,我的意思是它不是原始的 C 代码,它是一种具有 C 代码语法并按名称参数传递范例的 PL。

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);
tswap(++x,++y);
printf("%d %d %d\n",x,y,a);
return 0;
}

我认为第一部分的输出应该是:

-4 12 -4 11
-4 11 12

但是我可以找到 tswap (++x,++y) 部分的逻辑解决方案 有谁知道我该如何处理这部分?

提前致谢!

最佳答案

tswap(++x,++y) 

等同于:

++x;
++y;
tswap(x,y);

制作输出:

4 12 4 11
4 11 4
12 5 12 13
12 13 4

关于c - 具有 passByName 参数传递范例的函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890555/

相关文章:

c - 找出 1 到 100 范围内除数最多的数字

c - 指向二维指针数组的指针

C++ 将选项(的子集)传递给函数的优雅方式

c - malloc 如何区分占用相同空间的不同类型?

有人可以解释这个函数指针语法吗?

c - 在 C 中,字符如何工作

programming-languages - 是否有一种具有 native 按引用传递/按名称传递语义的语言,可以在现代生产应用程序中使用?

parameter-passing - "pass-by-name"是什么?它到底是如何工作的?

scala - 在 DSL 中隐藏和限定隐式变量的创建