C中的解码声明(数组和函数指针的组合)[关闭]

问题描述 投票:-9回答:1

我有这段代码:

(*I_dont_know ())[(int) ((*ptr))]

I_dont_know(), a function which takes void and returns a pointer.
ptr is an integer pointer.

据我所知,[(int)((*ptr))] ---> ptr是一个返回整数的函数指针,其余的我没有得到。有人可以解释一下吗?

c arrays function-pointers
1个回答
3
投票

该代码不是声明,但可以解释为表达式。

(*I_dont_know())[(int) ((*ptr))]
  1. 不带参数调用函数I_dont_know。此函数返回指向某事物的指针。
  2. 取消引用返回的指针以获取一些对象。
  3. 同时,取消引用ptr的值并将其转换为int值。
  4. 然后将int值作为[](索引)运算符的参数传递给步骤2中返回的对象。在C中,这可能是另一个指针或数组(数组也会衰减到指针)。在C ++中,这也可能是[]运算符重载的对象。
  5. 由于此表达式不在赋值的左侧,因此将返回从[]运算符子表达式返回的值(即数组中*ptr-index处的元素)。

假设这是C,那么索引运算符的参数应该转换为size_t而不是int。如果它是C ++,那么只有当int运算符重载专门接受[]参数操作数时才应该强制转换为int

© www.soinside.com 2019 - 2024. All rights reserved.