int(*p)和int*p之间有区别吗?

Gre*_*g M 1 c++ pointers

我刚刚学习了函数指针,并且要声明一个函数指针,你必须*在括号中添加指针名称,以确保它不返回int *.

两者之间有区别吗?

int *p
Run Code Online (Sandbox Code Playgroud)

int (*p)
Run Code Online (Sandbox Code Playgroud)

我尝试用cdecl查找,但到目前为止没有运气.cdecl说这是一回事,但没有提供解释.如果我宣布

short (*p)
Run Code Online (Sandbox Code Playgroud)

那会是一个短指针还是一个短指针?将p具有2个字节或4的大小?我知道有类似的问题,但到目前为止我还没有运气.

Joh*_*ger 7

两者之间会有区别吗?

int *p
Run Code Online (Sandbox Code Playgroud)

int (*p)
Run Code Online (Sandbox Code Playgroud)

不.这是两种不同的写同类型的方式.括号在这里并不神奇 - 它们只是用于覆盖优先级,就像算术运算符一样.

区别在于

int *p();
Run Code Online (Sandbox Code Playgroud)

(函数"p"返回的声明int *)和

int (*p)();
Run Code Online (Sandbox Code Playgroud)

(声明返回函数的指针int).如果没有括号*p,则(空)参数列表与声明的名称关联得更紧密.

如果我做了:

short (*p)
Run Code Online (Sandbox Code Playgroud)

将是一个短指针,或指向一个短指针?那将p是2个字节,还是4个字节?

类似于int (*p)它声明指向a的指针short.指针的大小是特定于实现的,但是4个字节和8个字节是常见的选择.指向的数据预计是a的大小,short也是特定于实现的,但通常是2.