在 C 中按名称传递实现

问题描述 投票:0回答:3

如何使用 C 语言中的 pass-by-name 机制计算依赖于索引 i 的算术表达式 𝑖^2 + 3i − 1 的值

9

Σ i^2 + 3i − 1
𝑖=0

通过调用 sum 过程并通过名称传递参数

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

c parameter-passing thunk callbyname pass-by-name
3个回答
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);
    

1
投票
我已经完成了这样的解决方案,如下所示,但我不确定它是否适用于传递名称, 你能评论一下我的解决方案吗?

#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); }
    

0
投票
老话题,但我认为你是“混淆 C 竞赛”的潜在良好候选人

© www.soinside.com 2019 - 2024. All rights reserved.