c - C 中的按名称传递实现

标签 c parameter-passing thunk callbyname pass-by-name

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

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

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

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

最佳答案

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

  • (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);

关于c - C 中的按名称传递实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197135/

相关文章:

c - 如何将 char 转换为 ASCII 形式?

c - C 程序中的错误小于预期

c - int a, f() {} 应该编译吗?

delphi - 如何将事件作为函数参数传递?

java - 如何使用 Java 将文件传递给 Jenkins

c++ - EEPROM 烧录器的设计模式

javascript - 在 Polymer 1.0 中使用纸张按钮事件无法访问数据属性

scala - 为什么在 Scala 中定义 Streams 时必须显式强制使用 thunk?

c++ - "Missing non-virtual thunks"和继承顺序

sml - 在 SML 中是否有多种编写 thunk 的方法?