作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
评估顺序确实很重要,所以,这就是所谓的非引用透明吗?
int i = 1;
int counter(){
i = i + 1;
return i;
}
int foo(int i, int j){
return i*2 + 3*j;
}
int main(){
printf("%d", foo(counter(), counter()));
}
最佳答案
我猜你可能想到的是函数参数的求值顺序在 C 中没有标准化。因为 counter()
会在每个函数上返回不同的结果调用,foo(2, 3)
的结果与 foo(3, 2)
的结果不同,编译和执行这段代码可能会得到不同的结果在不同的平台上。
然而,在同一个平台上,它是确定性的,正如其他人已经很好地解释的那样。 [更新](准确地说:一旦在具有特定编译器选项的特定平台上编译成可执行文件,所有执行将产生相同的输出。但是,正如评论者指出的那样,它可能 甚至在使用不同的编译选项构建时在同一平台上产生不同的输出。)[/Update]
关于令人困惑的 C 代码,有人为我解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250249/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!