【发布时间】:2016-03-28 13:16:18
【问题描述】:
例如,如果我有:
typedef int (*pFuncType)(int a, char b);
为了方便起见,我想声明一个“pFuncType”指向的类型的函数。像这样的:
(*pFuncType) funcDeclr;
这可能吗?
【问题讨论】:
例如,如果我有:
typedef int (*pFuncType)(int a, char b);
为了方便起见,我想声明一个“pFuncType”指向的类型的函数。像这样的:
(*pFuncType) funcDeclr;
这可能吗?
【问题讨论】:
这甚至可能吗?
这是不可能的。声明
typedef int * intptr;
表示intptr 是新类型。 intptr 类型的新变量可以定义为
intptr p; // Same as int * p;
使用intptr 不能声明int 类型的变量。在做
(*inptr) i;
等价于
(*(int *)) i;
这是一个错误的语法。pFuncType 也是如此。
还要注意声明的规则是声明说明符必须在声明符之前。 * 出现在声明符中,因此它不能出现在任何声明说明符之前。看grammar1
declaration
declaration-specifiers ;
declaration-specifiers init-declarator-list ;
declaration-specifiers
storage-class-specifier
type-specifier
type-qualifier
storage-class-specifier declaration-specifiers
type-specifier declaration-specifiers
type-qualifier declaration-specifiers
init-declarator-list
init-declarator
init-declarator-list , init-declarator
init-declarator
declarator
declarator = initializer
......
......
declarator
direct-declarator
pointer direct-declarator
direct-declarator
identifier
( declarator )
direct-declarator [ ]
direct-declarator [ constant-expression ]
direct-declarator ( )
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-list )
pointer
*
* pointer
* type-qualifier-list
* type-qualifier-list pointer
1 语法可以在 C11 标准的 §6.7 和 §6.7.6 部分下找到
【讨论】:
没有。不过,您可以声明非指针类型:
typedef int (funcType)(int a, char b);
funcType f;
int f(int a, char b) {
return a;
}
【讨论】: