从Java转C++:int* n与int *n的区别及相关疑问
关于C++指针声明的几个疑问解答
1. int* a; 和 int *b; 的区别
这两行代码完全没有语法上的区别,都是用来声明一个指向int类型的指针变量。空格在这里只是书写风格的差异:
- 写成
int* a的风格,更强调int*是一个整体的指针类型; - 写成
int *b的风格,更突出*是作用在变量b上的指针标识。
需要注意的是,如果在同一行声明多个变量,这种风格差异会影响理解:比如int* a, b;里a是指针,但b是普通int;int *a, b;的效果完全一样——本质上C++的语法是*绑定到变量,而非类型,所以多变量声明时,每个指针变量前都要单独加*。
2. int *a 和 int (*a) 是否相同?
这两者完全不同:
int *a是标准的指向int类型的指针声明;int (*a)是不完整的函数指针声明(完整写法类似int (*a)(int)),它表示a是一个指针,指向返回值为int类型的函数。括号在这里改变了优先级,让*先和a绑定,而非和前面的int绑定——如果没有括号,int *a()会被解析成返回int*类型的函数,而非函数指针。
内容的提问来源于stack exchange,提问作者codexistent
相关产品推荐
相关产品推荐

