我没有得到以下指针变量声明在c中的含义
char(*p)[15];
-
char(*p)(int *a);
-
int(*pt)(char*);
-
int *pt(char*);
有人帮忙吗?
基本规则:从标识符开始,在可以的时候向右读,在必要时离开。
- 从标识符*开始。 说出来,然后是“是一个”。 把“左脚”放在左边一个字符。
- 向右读,直到你结束或a
)
。 把你的“右脚”一个字符放在那个位置的右边,如果这就是你所击中的那个。- 如果你在向右看时看到
[42]
,请说“42的数组”。 - 如果你看到一个
(
当你向右看时 ,说“function获取”,然后递归说出每个参数的类型(但省略参数名称本身),然后是“并返回”。
- 如果你在向右看时看到
- 现在跳到你的左脚并向左看,直到你开始或a
(
。将你的左脚放在左边一个角色(
如果那就是你击中的那个)。- 如果您在向左看时看到
*
或&
,请说“指向”或“引用”。 - 你看到的任何其他东西(例如
const
,int
,MyFoo
),就这么说吧。
- 如果您在向左看时看到
- 如果你开始,你就完成了。 否则,跳回你的右脚并转到2。
*如果没有标识符,想象它必须去哪里 – 我知道这很棘手,但只有一个合法的位置。
遵循以下规则:
- p是一个指向15 char数组的指针
- p是一个指向函数的指针,指针指向int并返回char
- pt是一个指向函数的指针,它指向char并返回int
- pt是一个函数,它指向char并返回指向int的指针
找出指针所指向的类型的一个简单技巧就是删除*
并查看剩下的内容:
-
char p[15];
-
char p(int *a);
-
int pt(char*);
-
int pt(char*);
你得到的是指针指向的类型的变量声明。 或者不是在第四种情况:
int *pt(char*);
是函数原型而不是有效的指针声明。
编辑:
原因是没有括号,函数调用“operator”优先于指针解引用运算符。 在上面的例子中,简明的声明是:
我们有一个pt(char *)
函数,它返回一个int *
而
int (*pt)(char *);
翻译为:
*pt
是一个接受char *
并返回int
的函数。
这本质上意味着pt
本身就是指向该类型的指针。
- 指向十五个字符数组的指针。
- function指针。 采用int指针并返回char
- 与4相同
- function原型。 取char并返回int。