C ++中的函数声明

时间:2013-09-18 21:12:17

标签: c++ function declaration

我有以下声明:

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

2 个答案:

答案 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&p1b * c。是的,3个论点。

到目前为止:float foo(?, ?, ?);

第一个参数是strstr的类型是什么?它是char[],衰减为char*

到目前为止:float foo(char*, ?, ?);

第二个参数是&p1。这意味着我们正在使用p1的地址。所以它必须是指向p1类型的指针。 p1int*。我们的类型将为int**

到目前为止:float foo(char*, int**, ?);

第三个论点是b * cbc的类型为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);