尽管我几乎一直在使用std::vector,但我对尽可能多地了解指针很感兴趣。下面是我所说的例子:
char* array[5]; // What does it mean?
// 1) pointer to an array of 5 elements!
// 2) an array of 5 pointers?我对这个声明的确切定义很感兴趣。
发布于 2009-10-01 00:11:26
不仅仅是指针和数组:How to interpret complex C/C++ declarations
从最里面的括号开始读取声明,向右转,然后向左转。当你遇到括号时,方向应该颠倒过来。一旦分析完括号中的所有内容,就跳过它。继续,直到解析完整个声明。
对right-left规则有一个小小的改变:当您第一次开始读取声明时,必须从标识符开始,而不是从最里面的括号开始。
举个例子:
char* array[5];是一个包含5个指向char的指针的数组。
发布于 2009-10-01 00:23:03
cdecl是一个非常适合这类事情的程序。(特别是当您将函数指针添加到混合中时!)
Type `help' or `?' for help
cdecl> explain char* foo[5]
declare foo as array 5 of pointer to char
cdecl> declare bar as array 5 of pointer to function (integer, integer) returning char
char (*bar[5])(int , int )发布于 2009-10-01 00:35:23
很久以前,我从一些杂志文章中学到了顺时针/螺旋规则。这里有一篇在线文章描述了这项技术:
它为我提供了很好的帮助,尽管我仍然很难处理我有时遇到的一些基于模板的可怕声明。
https://stackoverflow.com/questions/1501292
复制相似问题