我遇到了两个指针声明,我很难理解。我对优先规则的理解如下:
Operator Precedence Associativity
(), [ ] 1 Left to Right
*, identifier 2 Right to Left
Data type 3
但是,即使是这样,我似乎也不知道如何正确地评估以下示例:
第一个示例
float * (* (*ptr)(int))(double **,
考虑以下声明:
double(*foo(double (*)(double, double[]), double)) (double, ...)
用英语描述foo的类型。
这是家庭作业问题。我的分析是:
"foo is a function pointer to a function that has as it's first argument,
another function pointer to a function that returns a double and takes a
double and an array of doubles.
我是一名大学生,我们的老师告诉我们这些建议的意义,但我只想弄清楚其中的一些:
1. int *p1;
2. int *p2[10];
3. int (*p3)[10];
4. int (*p4)();
5. int **p5();
6. int (**p6)[10];
7. int (**p7)();
8. int *(*p8)();
9. int (*p9[10])();
10. int **p10[10];
这就是我到目前为止想出来的:
p1是指向int的指针。
p2是由10个int指针组成的数组。
p3是指向具有10个元素的静态数组的指针。
p4是一个函数指针
p5根
int (*clever1(int (* (*goo_ptr)(int, int, int (*)(int, int), int(*)(int, int)))(int, int), int a, int b, int (*a_fptr)(int, int), int(*b_fptr)(int, int) ))(int, int) {
return goo_ptr(a,b,b_fptr,a_fptr);
}
什么类型的clever1?什么类型的goo_ptr?我不明白密码。
当引用类型函数用作l值时,它们是如何工作的?我的意思是,在这样一个函数中做事情的顺序是什么,从而使返回变量得到一个新的值,它与正常的r值函数中发生的情况有什么不同?
例如,在下面的代码中,
double& matrix::operator()(int i, int j) const //parenthesis operator
{
if (!validdex(*this,i,j)) throw(-23); //index out of bounds
return mat[(i-1)*ncols+(j-1)]; //A(i,j)=mat[(i-1)*ncols+(j-1)]
}
我想知道如何编写一个函数,它返回一个函数的指针,该函数返回一个函数指针,而不带typedef。例如,返回函数指针的函数可以定义为:
type (*f_name(..))(..){..}
这将返回一个指向返回'type‘的函数的指针,如果'type’是一个函数指针,那么如何声明该函数。但是由于我的主管不想使用打字机,所以我不能使用它们。
谢谢你能提供的任何帮助。
书中的C程序:
#include <stdio.h>
int *addition ( int a , int b) {
int c = a + b;
int *d = &c;
printf("%d %d, ",c, &c);
printf("%d %d, ",d, *d);
return d ;
}
int main (void) {
int result = *(addition(1,2));
int *result_ptr = addition(1,2);
//
请告诉我对给定函数的调用将返回什么,以及如何返回?代码:
typedef struct {
int size;
ptrdiff_t index;
void (*inlet) ();
int argsize;
ptrdiff_t argindex;
} CilkProcInfo;
/*
* Returns a pointer to the slow version for a procedure
* whose signature is p.
*/
/* the function definition is - */
static void (