C中的解码声明(数组和函数指针的组合)
Decoding declaration(a combination of array and function pointers) in C
我有这段代码:
(*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
是一个函数指针,return 是一个整数,其余的我没有得到。有人可以解释一下吗?
该代码不是声明,但可以解释为表达式。
(*I_dont_know())[(int) ((*ptr))]
- 不带参数调用函数
I_dont_know
。这个函数 returns 指向某物的指针。
- 取消引用返回的指针以获取一些对象。
- 同时,取消引用
ptr
的值并将其转换为 int
值。
- 然后将该
int
值作为参数传递给步骤 2 中返回的那个对象上的 []
(索引)运算符。在 C 中,这可能是另一个指针或数组(数组衰减到指针也一样)。在 C++ 中,这也可以是重载 []
运算符的对象。
- 由于此表达式不在赋值的左侧,因此从
[]
运算符子表达式返回的值(即位于 *ptr
索引处的元素array) 将被返回。
假设这是 C,那么索引运算符的参数应该转换为 size_t
而不是 int
。如果它是 C++,那么只有在 []
运算符重载明确接受 int
参数操作数时,才应将其转换为 int
。
我有这段代码:
(*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
是一个函数指针,return 是一个整数,其余的我没有得到。有人可以解释一下吗?
该代码不是声明,但可以解释为表达式。
(*I_dont_know())[(int) ((*ptr))]
- 不带参数调用函数
I_dont_know
。这个函数 returns 指向某物的指针。 - 取消引用返回的指针以获取一些对象。
- 同时,取消引用
ptr
的值并将其转换为int
值。 - 然后将该
int
值作为参数传递给步骤 2 中返回的那个对象上的[]
(索引)运算符。在 C 中,这可能是另一个指针或数组(数组衰减到指针也一样)。在 C++ 中,这也可以是重载[]
运算符的对象。 - 由于此表达式不在赋值的左侧,因此从
[]
运算符子表达式返回的值(即位于*ptr
索引处的元素array) 将被返回。
假设这是 C,那么索引运算符的参数应该转换为 size_t
而不是 int
。如果它是 C++,那么只有在 []
运算符重载明确接受 int
参数操作数时,才应将其转换为 int
。