【发布时间】:2014-04-03 20:12:28
【问题描述】:
所以我是刚接触 Java 的 C 新手,我想了解如何阅读声明。 我知道我举了一个例子,但我希望能够阅读所有声明并清楚地理解它。我并不是真的要求你们解决它,只是指导我
For example:
int point *[];
int point *()[];
【问题讨论】:
所以我是刚接触 Java 的 C 新手,我想了解如何阅读声明。 我知道我举了一个例子,但我希望能够阅读所有声明并清楚地理解它。我并不是真的要求你们解决它,只是指导我
For example:
int point *[];
int point *()[];
【问题讨论】:
要破译 C 声明,请使用 右 - 左规则
为你的例子int point *[];
point 是指向 int 的指针数组。
首先了解符号的含义。
* // "pointer to"
[] // "array of"
() // "a function returning"
现在您知道了可以破译任何声明的符号。
例如 int *(*pointer())();`
第 1 步查找标识符
int *(*pointer())();
^^^^^^^
在这种情况下它是指针,所以你读作 "pointer is"
第 2 步使用左右规则
int *(*pointer())();
^^
你先向右移动,你会碰到(),所以你读作指针是函数返回
第 3 步继续规则
int *(*pointer())();
^
然后你再次向右移动,但这里有一个右括号),
所以你向左移动标识符,在这里你有一个*,所以你读为指针是函数返回指针
第 4 步继续规则
int *(*pointer())();
^^
然后你继续向左移动,但是有一个左括号(,所以你不能向左移动,所以现在你向右移动。现在你到达(),你读为指针是函数返回指向函数返回的指针
第 5 步继续规则
int *(*pointer())();
^
现在你不能向右移动,因为没有更多符号了,所以向左移动并到达*,
你读为指针是函数返回指针到函数返回指针
第 6 步继续规则
int *(*pointer())();
^^^
现在你不能左右移动,因为你没有符号所以你读int,
你终于有了
指针是函数返回指针,函数返回指向int的指针
【讨论】:
int point *[]; 是无效的 AFAIK。一个指针数组是int *point[];。