-3

我有以下声明:

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);
4

1 回答 1

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。所以它必须是指向任何类型的指针p1p1是一个int*。我们的类型将是int**.

至今:float foo(char*, int**, ?);

第三个论点是b * cb并且c是 类型int。整数之间的乘法计算结果为int。我们的类型将是int.

至今:float foo(char*, int**, int);

而已!

于 2013-09-18T21:18:11.463 回答