char(*p)[15];
char(*p)(int *a);
int(*pt)(char*);
int *pt(char*);
答案 0 :(得分:2)
基本规则:从标识符开始,然后在您必须时向右阅读。
)
。把你的“右脚”一个字符放在)
所在的位置的右边,如果这就是你所击中的那个。
[42]
,请说“数组为42”。(
,说“功能正常”,则递归说出每个参数的类型(但省略参数名称本身),然后是“和”返回”。(
。如果你击中的那个,将你的左脚放在(
左侧的一个角色。
*
或&
,请说“指向”或“引用”。const
,int
,MyFoo
),只需说出来。*如果没有标识符,想象它必须去哪里 - 我知道这很棘手,但只有一个合法的位置。
遵循以下规则:
答案 1 :(得分:1)
找出指针所指向的类型的一个简单技巧就是删除*
并查看剩下的内容:
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
本身就是指向该类型的指针。
答案 2 :(得分:0)