难以理解指针语法C++
Trouble understanding C++ pointer syntax
我无法理解我在面试中遇到的这句代码。
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
数组的指针"。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么