在 C 中按名称实现传递
Pass by name implementation in C
如何使用C语言中的传递名称机制计算依赖于索引i的算术表达式^2 + 3i − 1的值
9
∑ i^2 + 3i − 1
=0
通过调用带有名称传递参数的求和过程
用 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);
我已经做了这样的解决方案如下它有效但我不确定它是否适用于按名称传递,
你能评论我的解决方案吗?
#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);
}
如何使用C语言中的传递名称机制计算依赖于索引i的算术表达式^2 + 3i − 1的值
9
∑ i^2 + 3i − 1
=0
通过调用带有名称传递参数的求和过程
用 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);
我已经做了这样的解决方案如下它有效但我不确定它是否适用于按名称传递, 你能评论我的解决方案吗?
#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);
}