【问题标题】:School Assignment of understanding the definition of a specific C pointer理解具体C指针定义的学校作业
【发布时间】:2018-05-04 09:57:40
【问题描述】:

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

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

有人可以确认我对声明的理解,并告诉我这样的定义在实践中是否有用吗?

【问题讨论】:

  • 我建议你关注the clockwise spiral rule。从变量(在您的情况下为f)开始并向外。
  • cdecl.org 也可能有帮助。
  • 实际上,没有多少 C 程序员知道这个声明的含义。如果他们需要像这样复杂的东西,他们会使用 typedef 使其更具可读性。
  • 这是一个典型的学习 C 声明如何工作的学校作业。当你学会了这一点时,你也学会了永远不要这样做。除了可能在 4 月 1 日进行代码审查。

标签: c pointers syntax


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多