C中的数组语法

Kes*_*ria 5 c arrays

有什么区别

int * a[10];

int (*b)[10];

我知道第一个是整数指针数组,但第二个是什么?如果我尝试分配

int (*c)[10] = a;

我到底在做什么?

Kei*_*son 10

查看是否可以cdecl为系统安装命令.(在Ubuntu上,sudo apt-get install cdecl.)cdecl.org上还有一个web界面.

这是我告诉我的系统示例:

$ cdecl
Type `help' or `?' for help
cdecl> explain int * a[10];
declare a as array 10 of pointer to int
cdecl> explain int (*b)[10];
declare b as pointer to array 10 of int
cdecl> 
Run Code Online (Sandbox Code Playgroud)


Meh*_*dad 5

第二个是指向10个整数数组的指针.哪里?天知道; 你从来没有初始化它.

如果你赋予a它,你就会指向同一个10个整数的数组,a指向......没什么特别的.


Ste*_*eve 5

我曾经学过一些奇怪的技巧(也许这不是正确的词)关于阅读真正困扰我的声明:http://www.antlr.org/wiki/display/CS652/How+To+Read+C+Declarations

从变量名称开始(如果没有标识符,则从最里面的构造开始.向右看,不要跳过右括号;说出你看到的内容.再看左边而不跳过括号;说出你所看到的.如果你看到了,请跳出一个括号任何.看起来正确;说出你看到的东西.向左看;说出你看到的东西.继续这样,直到你说变量类型或返回类型.

使用该心算法,您可以轻松阅读和理解任何C变量声明.

有时,当它们变得非常复杂时,使用这个小实用程序很好:cdecl可以作为一个独立的应用程序,也可以作为一个网站:http://cdecl.org/