【发布时间】:2010-12-08 10:49:54
【问题描述】:
char(*p)[15];char(*p)(int *a);int(*pt)(char*);int *pt(char*);
有人帮忙吗?
【问题讨论】:
标签: c variables pointers declaration
char(*p)[15];char(*p)(int *a);int(*pt)(char*);int *pt(char*);有人帮忙吗?
【问题讨论】:
标签: c variables pointers declaration
基本规则:从标识符开始,尽可能向右阅读,必要时向左阅读。
)。把你的“右脚”放在) 的右边,如果那是你击中的。
[42],请说“42 数组”。(,请说“函数采用”,然后递归说出每个参数的类型(但省略参数名称本身),然后是“并返回” .(。将左脚放在( 的左侧一个字符,如果这是你击中的。
* 或 &,请说“指向”或“引用”。const、int、MyFoo),直接说出来。* 如果没有标识符,想象一下它必须去哪里——我知道这很棘手,但只有一个合法的位置。
遵循这些规则:
【讨论】:
找出指针指向的类型的一个简单技巧是删除 * 并查看剩下的内容:
char p[15];char p(int *a);int pt(char*);int pt(char*);你得到的是你的指针所指向的类型的变量声明。第四种情况还是不行:
int *pt(char*);
是一个函数原型,而不是一个有效的指针声明。
编辑:
原因是没有括号,函数调用“操作符”优先于指针解引用操作符。在上面的例子中,简单的英文声明是:
我们有一个pt(char *) 函数,它返回一个int *
虽然
int (*pt)(char *);
翻译为:
*pt 是一个接受char * 并返回int 的函数。
这本质上意味着pt 本身就是一个指向该类型的指针。
【讨论】:
【讨论】:
typedef 关键字被省略),而不是函数原型。 4是函数原型,但是返回类型是int*,不是int。