难以理解指针语法C++



我无法理解我在面试中遇到的这句代码。

int(*(*ptr[3])(char*))[2];

我试过查看IDE,但我所拥有的只是它是一个数据类型数组

int (*(*[3])(char *)) 

我无法理解这一点。

也许你可以一次分解一个,以更好地理解语法。首先使用没有数组符号的简单定义启动

int(*(*ptr)(char*));

所以ptr是一个函数指针,它将char指针作为参数并返回指向int的指针。现在将其扩展到数组表示法

int(*(*ptr[3])(char*))[2];

这意味着您有一个函数指针数组,每个指针都将采用一个char指针参数并返回指向两个整数数组的指针。

如果您使用您定义的这些指针进行函数调用,则可以看到它有效。请注意,以下函数仅用于演示目的,不传达任何逻辑目的

#include <iostream>
static int arr[2] = { 2, 2 };
// initialize  'bar' as a function that accepts char* and returns
// int(*)[2]
int (*bar(char * str))[2] {
return &arr;
}
int main() {
// pointer definition, not initialized yet
int(*(*foo[3])(char*))[2];
char ch = 'f';
// as long as the signatures for the function pointer and 
// bar matches, the assignment below shouldn't be a problem
foo[0] = bar;
// invoking the function by de-referencing the pointer at foo[0]
// Use 'auto' for C++11 or declare ptr as int (*ptr)[2] 
auto *ptr = (*foo[0])(&ch);
return 0;
}

您必须从内到外展开类型,并回想一下[]()(右侧(的绑定比*(左侧(强。若要重写此绑定,请使用括号()

int(*(*ptr[3])(char*))[2];
^   ^ ^^  ^   ^       ^
|   | ||  |   |       |
|   | |ptr is |       |
|   | |   |   |       |
|   | |   an array of three
|   | |       |       |
|   | pointers to     |
|   |         |       |
|   |         a function taking a char* and returning
|   |                 |
|   a pointer to      |
|                     an array of two
ints

即"ptr是一个由三个指针组成的数组,指向一个函数,该函数接受一个char*并返回一个指向两个int数组的指针"。

最新更新