C++指针类型定义疑问:同一行声明变量为何类型不同?
为什么
int* a,b;中&a和&b的类型不同? 这并非编译器的异常行为,而是C++声明语法的固有特性——指针修饰符*仅绑定到紧跟的变量名,而非作用于整个声明语句中的所有变量。
第一种情况分析
代码示例:
#include <iostream> #include <typeinfo> int main(int argc, char** argv) { int* a,b; std::cout << typeid(&a).name() << std::endl; std::cout << typeid(&b).name() << std::endl; return 0; }
这段代码里的int* a,b;完全等价于:
int *a; int b;
a是int*类型的指针,对其取地址&a得到的是指向指针的指针,类型为int**,对应输出的PPi(其中P表示指针,Pi即int*,PPi即int**)。b是普通的int类型变量,对其取地址&b得到的是指向int的指针,类型为int*,对应输出的Pi。
第二种情况分析
代码示例:
#include <iostream> #include <typeinfo> int main(int argc, char** argv) { int* a; int* b; std::cout << typeid(&a).name() << std::endl; std::cout << typeid(&b).name() << std::endl; return 0; }
这里a和b都被单独声明为int*类型,因此对它们取地址后得到的都是int**类型,输出自然都是PPi,符合预期。
总结建议
这种语法规则继承自C语言,为了避免类似混淆,建议在声明指针变量时,每个变量单独一行声明并带上*,不要在同一行混合声明指针和非指针变量,也不要错误认为*会作用于整行的所有变量。
内容的提问来源于stack exchange,提问作者s0nny13
相关产品推荐
相关产品推荐

