如何使用 C 语言中的 pass-by-name 机制计算依赖于索引 i 的算术表达式 𝑖^2 + 3i − 1 的值
9
Σ i^2 + 3i − 1
𝑖=0
传递用 C 编写的名称示例也可以帮助我
可以使用(1)来解决(2),但这不是一个好方法。
你可以使用(2)作为例子来学习(1)。
但是应该很清楚,(1)和(2)不是一回事。
void f(int i); ... f(123);
void f(int* i); ... int i=123; f(&i);
int sum = 0;
for(int i=0; i<=9; ++i)
sum += 2 + 3*i - 1;
// now sum contains the sum
如果出于某种原因(例如家庭作业要求?)你想传递一个指针来计算总和,那么:
void f(int* psum, int i) {
*psum += 2 + 3*i - 1;
}
...
int sum=0;
for(int i=0; i<=9; ++i)
f(&sum, i);
#include <stdio.h>
int i;
typedef int* (*intThunk)(void);
int* vSubiThunk(void){ return &i; }
int sum(intThunk i){
return (*i())* (*i()) + (*i() * 3) - 1 ;
}
int main(void){
int total = 0;
for(i=0;i<=9;i++)
total += sum(vSubiThunk);
printf("%d \n",total);
}