c - 为什么这个函数不纯粹?

标签 c function language-agnostic

在维基百科文章中https://en.wikipedia.org/wiki/Pure_function#Impure_functions它说下面的函数不是纯函数。

int f(int* x) 
{
    return *x;
}

这是为什么呢?该函数会为相同的参数返回相同的值吗?如果它是一个非可变引用,是否会被认为是纯引用,如下所示?

int f2(const int* x) 
{
    return *x;
}

最佳答案

f 不是纯的,因为对于相同的参数,它的返回值不一定相同。您可以使用相同的输入两次调用 f 并获得不同的输出。下面的程序演示了这一点:

#include <stdio.h>

int main() {
   int i = 3;
   int * const x = &i;
   printf("%d\n", f(x));
   i = 4;
   printf("%d\n", f(x));
   return 0;
}

因为 x 在两次调用之间没有变化,第二次调用 f(x) 可以被优化掉(有利于重用第一次的结果call) 如果 f 是纯的。显然,这可能会产生错误的结果,因此 f 不是纯的。

f2 出于同样的原因不是纯的。

关于c - 为什么这个函数不纯粹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56916347/

相关文章:

c - 读取文件和操作队列

c - 单元测试 C 库,内存管理

php - function_exists 返回 false 但声明抛出错误

for-loop - for 循环括号内的两个分号

algorithm - 有效分配项目和满足最小值的已知算法?

c - 在 C 中的一个 printf 中打印(部分)数组

swift - 同一个参数有两个不同的名称有什么意义?

java - 存储方法及其参数值?

if-statement - 如果语句不被视为 bool 值?

c - OCI错误: LNK1113: invalid machine type