首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何破译pointers+arrays的复杂声明?

如何破译pointers+arrays的复杂声明?
EN

Stack Overflow用户
提问于 2009-10-01 00:08:18
回答 7查看 978关注 0票数 3

尽管我几乎一直在使用std::vector,但我对尽可能多地了解指针很感兴趣。下面是我所说的例子:

代码语言:javascript
复制
char* array[5]; // What does it mean?
// 1) pointer to an array of 5 elements!
// 2) an array of 5 pointers?

我对这个声明的确切定义很感兴趣。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-10-01 00:11:26

不仅仅是指针和数组:How to interpret complex C/C++ declarations

从最里面的括号开始读取声明,向右转,然后向左转。当你遇到括号时,方向应该颠倒过来。一旦分析完括号中的所有内容,就跳过它。继续,直到解析完整个声明。

对right-left规则有一个小小的改变:当您第一次开始读取声明时,必须从标识符开始,而不是从最里面的括号开始。

举个例子:

代码语言:javascript
复制
char* array[5];

是一个包含5个指向char的指针的数组。

票数 3
EN

Stack Overflow用户

发布于 2009-10-01 00:23:03

cdecl是一个非常适合这类事情的程序。(特别是当您将函数指针添加到混合中时!)

代码语言:javascript
复制
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 )
票数 3
EN

Stack Overflow用户

发布于 2009-10-01 00:35:23

很久以前,我从一些杂志文章中学到了顺时针/螺旋规则。这里有一篇在线文章描述了这项技术:

  • http://c-faq.com/decl/spiral.anderson.html

它为我提供了很好的帮助,尽管我仍然很难处理我有时遇到的一些基于模板的可怕声明。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1501292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档