2

如何使用 C 语言中的名称传递机制计算取决于索引 i 的算术表达式 ^2 + 3i - 1 的值

9
∑ i^2 + 3i - 1
=0

通过使用按名称传递的参数调用 sum 过程

用 C 编写的按名称传递示例也可以帮助我

4

2 回答 2

2

这里有两个完全不同的主题:

  • (1) 你想学习 C。在 C 中你总是传递一个值,但那个值可能是一个指针,它实际上就像通过引用传递一样。
  • (2) 你想计算那个总和。

可以使用 (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);
于 2016-05-13T10:31:59.513 回答
1

我已经完成了这样的解决方案,因为它可以工作,但我不确定它是否适用于 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);
}
于 2016-05-16T19:50:27.940 回答