需要帮助来理解c语言

时间:2017-12-30 09:51:02

标签: c pointers declaration

c语言中以下类型的指针声明之间的区别是什么?

int *p(int a),
int (*p)(int a),
int *(*p)(it(*a)[]),

如果添加一些例子以便正确解释,那将非常有用。

2 个答案:

答案 0 :(得分:1)

int *p(int a);

我强烈怀疑这是一个指针声明。如果它写得更好,你可能会理解它是一个函数,它接受int并返回指向int的指针。

int (*p)(int a);

基本功能指针。 p指向一个int并返回int的函数。例如:

int foo(int x) { return x+1; }
p = &foo;

最后一个有点复杂,因为它无效。括号内应该有一个数字。我认为它已得到纠正(包括拼写错误),如下所示。

int *(*p)(int(*a)[3]);

这是一个函数指针,该函数获取指向3 int s数组的指针,并返回指向int的指针。例如:

int *extract_first(int (*a)[3]) {
    return (*a);
}
p = &extract_first;

答案 1 :(得分:1)

第一个是fa函数声明,它接受一个int并返回一个指向int的指针, 第二个是指向函数的指针,它接受一个int并返回一个int 如果第三个应该是:

int * (*p) (int(*a)[]);

它是一个指向函数的指针,它指向一个指向数组的int并返回一个指向int的指针。