理解特定C指针定义的学校作业

理解特定C指针定义的学校作业,c,pointers,syntax,C,Pointers,Syntax,在一门C入门课程(在一所工程大学)中,我们被要求用int(**f[5])(void))[10]的指针识别一个声明 我目前对声明的理解是“一个包含10个函数指针的数组,每个函数指针返回一个int指针,而不接受任何参数” 有人能证实我对声明的理解,并告诉我这些定义在实践中是否有用吗?int(*(*f[5])(void))[10]声明(*(*f[5])(void))[10]为int 这意味着(*(*f[5])(void))是一个10int的数组 这意味着(*f[5])(void)是指向10int数组的

在一门C入门课程(在一所工程大学)中,我们被要求用
int(**f[5])(void))[10]的指针识别一个声明

我目前对声明的理解是“一个包含10个函数指针的数组,每个函数指针返回一个int指针,而不接受任何参数”

有人能证实我对声明的理解,并告诉我这些定义在实践中是否有用吗?

int(*(*f[5])(void))[10]
声明
(*(*f[5])(void))[10]
int

这意味着
(*(*f[5])(void))
是一个10
int
的数组

这意味着
(*f[5])(void)
是指向10
int
数组的指针

这意味着
(*f[5])
是一个函数,它获取
void
并返回一个指向10
int
数组的指针

这意味着
f[5]
是一个指向函数的指针,该函数取
void
并返回一个指向10
int
数组的指针

这意味着
f
是一个由5个指针组成的数组,指向取
void
并返回一个指向10
int
int(*(*f[5])(void))[10]
的数组的函数,声明
(*(*f[5])(void))[10]
int

这意味着
(*(*f[5])(void))
是一个10
int
的数组

这意味着
(*f[5])(void)
是指向10
int
数组的指针

这意味着
(*f[5])
是一个函数,它获取
void
并返回一个指向10
int
数组的指针

这意味着
f[5]
是一个指向函数的指针,该函数取
void
并返回一个指向10
int
数组的指针


这意味着
f
是一个由5个指针组成的数组,指向取
void
并返回一个指向10个
int
数组的指针的函数。我建议您遵循这个方法。从变量开始(
f
,在您的情况下)向外。在实践中,没有多少C程序员知道这个声明的含义。如果他们需要像这样复杂的东西,他们会使用typedef使它更具可读性。这可能是一个典型的学校作业,学习C声明如何工作。当你学会了这一点,你也学会了永远不要这样做。可能除了4月1日的代码审查。我建议您遵循。从变量开始(
f
,在您的情况下)向外。在实践中,没有多少C程序员知道这个声明的含义。如果他们需要像这样复杂的东西,他们会使用typedef使它更具可读性。这可能是一个典型的学校作业,学习C声明如何工作。当你学会了这一点,你也学会了永远不要这样做。可能除了4月1日的代码审查。