如何使用 C 语言中的名称传递机制计算取决于索引 i 的算术表达式 ^2 + 3i - 1 的值
9
∑ i^2 + 3i - 1
=0
通过使用按名称传递的参数调用 sum 过程
用 C 编写的按名称传递示例也可以帮助我
如何使用 C 语言中的名称传递机制计算取决于索引 i 的算术表达式 ^2 + 3i - 1 的值
9
∑ i^2 + 3i - 1
=0
通过使用按名称传递的参数调用 sum 过程
用 C 编写的按名称传递示例也可以帮助我
这里有两个完全不同的主题:
您可以使用 (1) 来解决 (2) 但这不是一个好方法。
你可以以(2)为例来学习(1)。
但应该很清楚,(1)和(2)不是一回事。
这是在 C 中将值传递给函数的方式:void f(int i); ... f(123);
这是在 C 中传递指向函数的指针的方式:void f(int* i); ... int i=123; f(&i);
这是计算 C 中总和的典型方法:
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);
我已经完成了这样的解决方案,因为它可以工作,但我不确定它是否适用于 pass-by-name,你能评论我的解决方案吗?
#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);
}