我有以下声明:
int a, b, c;
int *p1, *p2, *p3;
char d, str[10], *cp;
float big, r;
我必须提供正确的功能声明。以下内容:
r = foo(str, &p1, b * c);
str[8] = bazptr( &b, ‘#’, &cp);
pretty( strlen(str), *p2 - 10, str[2] + 3.141, p2 );
就像这个例子一样:
int go_figure(int a1, char b2);
答案 0 :(得分:1)
我将以第一个为例解决。
// Declarations we care about
int b, c;
int *p1;
char str[10];
// Function we need to figure out the signature of
r = foo(str, &p1, b * c);
我首先要弄清楚返回类型:
r =
告诉我所需的返回类型将是r
的类型:返回类型为float
。 (显然没有考虑可能的隐式转换)
到目前为止:float foo(?...);
然后我会计算参数的数量:str
,&p1
,b * c
。是的,3个论点。
到目前为止:float foo(?, ?, ?);
第一个参数是str
。 str
的类型是什么?它是char[]
,衰减为char*
。
到目前为止:float foo(char*, ?, ?);
第二个参数是&p1
。这意味着我们正在使用p1
的地址。所以它必须是指向p1
类型的指针。 p1
是int*
。我们的类型将为int**
。
到目前为止:float foo(char*, int**, ?);
第三个论点是b * c
。 b
和c
的类型为int
。整数之间的乘法求值为int
。我们的类型将为int
。
到目前为止:float foo(char*, int**, int);
就是这样!
答案 1 :(得分:0)
这些语句需要这些函数定义:
// r = foo(str, &p1, b * c);
float foo(char *p1, int **p2, int p3);
// str[8] = bazptr( &b, ‘#’, &cp);
char bazptr(int *p1, char p2, char **cp);
// pretty( strlen(str), *p2 - 10, str[2] + 3.141, p2 );
void pretty(int p1, int p2, float p3, int p4);