提示写一个可重入求和函数
Hint write a reentrant sum function
我必须在 C 中编写一个普通求和函数和一个可重入函数。我必须传递一个 int 并且必须将它添加到 INIT_VALUE。在可重入函数中,main 传递一个 int* 来保持状态。我如何在第一次调用时初始化这个指针?我必须在乐趣中初始化它,而不是在 main 中。谢谢
#include <stdio.h>
#ifndef INIT_VALUE
#define INIT_VALUE 0
#endif
int somma(int x){
static int val = INIT_VALUE;
val += x;
return val;
}
int somma_r(int x, int* saveptr){
// pointer initialize and sum
// return old_value ;
}
int main (){
int x;
int s;
int s_r;
int *stato;
fscanf(stdin,"%d",&x);
while(x>=0){
s = somma(x);
s_r = somma_r(x,stato);
fscanf(stdin,"%d",&x);
}
printf("%d\n",s);
printf("%d\n",s_r);
return 0;
}
在您的程序中使用函数签名 (int somma_r(int x, int* saveptr)
),您无法在第一次调用时初始化指针。
您可能需要这个(修改了 3 行代码):
...
int s = INIT_VALUE; // otherwise s will not be initialized
int s_r = INIT_VALUE; // otherwise s_r will not be initialized
int stato = INIT_VALUE; // state to be used with the somma_r function
...
s_r = somma_r(x, &stato);
...
somma_r函数
int somma_r(int x, int* saveptr){
*saveptr += x;
return *saveptr;
}
在 somma_r
函数中进行初始化的版本。这需要修改somma_r
:
的签名
int somma_r(int x, int **saveptr){
if (*saveptr == NULL) {
*saveptr = malloc(sizeof(int));
**saveptr = INIT_VALUE;
}
**saveptr += x;
return **saveptr;
}
int main (){
int x;
int s = 0;
int s_r = 0;
int *stato = NULL;
fscanf(stdin,"%d",&x);
while(x>=0){
s = somma(x);
s_r = somma_r(x,&stato);
fscanf(stdin,"%d",&x);
}
printf("%d\n",s);
printf("%d\n",s_r);
return 0;
}
我必须在 C 中编写一个普通求和函数和一个可重入函数。我必须传递一个 int 并且必须将它添加到 INIT_VALUE。在可重入函数中,main 传递一个 int* 来保持状态。我如何在第一次调用时初始化这个指针?我必须在乐趣中初始化它,而不是在 main 中。谢谢
#include <stdio.h>
#ifndef INIT_VALUE
#define INIT_VALUE 0
#endif
int somma(int x){
static int val = INIT_VALUE;
val += x;
return val;
}
int somma_r(int x, int* saveptr){
// pointer initialize and sum
// return old_value ;
}
int main (){
int x;
int s;
int s_r;
int *stato;
fscanf(stdin,"%d",&x);
while(x>=0){
s = somma(x);
s_r = somma_r(x,stato);
fscanf(stdin,"%d",&x);
}
printf("%d\n",s);
printf("%d\n",s_r);
return 0;
}
在您的程序中使用函数签名 (int somma_r(int x, int* saveptr)
),您无法在第一次调用时初始化指针。
您可能需要这个(修改了 3 行代码):
...
int s = INIT_VALUE; // otherwise s will not be initialized
int s_r = INIT_VALUE; // otherwise s_r will not be initialized
int stato = INIT_VALUE; // state to be used with the somma_r function
...
s_r = somma_r(x, &stato);
...
somma_r函数
int somma_r(int x, int* saveptr){
*saveptr += x;
return *saveptr;
}
在 somma_r
函数中进行初始化的版本。这需要修改somma_r
:
int somma_r(int x, int **saveptr){
if (*saveptr == NULL) {
*saveptr = malloc(sizeof(int));
**saveptr = INIT_VALUE;
}
**saveptr += x;
return **saveptr;
}
int main (){
int x;
int s = 0;
int s_r = 0;
int *stato = NULL;
fscanf(stdin,"%d",&x);
while(x>=0){
s = somma(x);
s_r = somma_r(x,&stato);
fscanf(stdin,"%d",&x);
}
printf("%d\n",s);
printf("%d\n",s_r);
return 0;
}