C++中使用逗号声明两个指针变量是否存在语法错误?
问题原因解析
首先你的代码存在野指针问题,和「z和x不能同时存储y的地址」完全无关:
#include<iostream> using namespace std; int main() { string y="hello"; // 这里仅初始化了z,x未做任何赋值,是野指针 string* x, *z= &y; // 访问未初始化的x属于未定义行为,输出结果完全不可预测 cout<<x<<endl; cout<<*x; }
- 你写的声明语句
string* x, *z= &y;的作用是声明两个string类型指针,仅将z初始化为y的地址,x没有被赋值,存储的是内存随机残留值,访问它的结果是完全不确定的,可能输出乱码、可能崩溃,也可能刚好看起来正常。 - 你删除
*z声明后能正常运行,是因为修改后的声明变成了string* x = &y;,此时x被正确赋值为y的地址,自然输出正常。你观察到的两种场景的差异只是未定义行为的巧合表现,和z是否存在没有因果关系。
如果要让两个指针同时存储y的地址,需要分别初始化:
// 同声明语句分别初始化 string* x = &y, *z = &y; // 分开声明可读性更高,不容易出现初始化遗漏问题 string* x = &y; string* z = &y;
内容的提问来源于stack exchange,提问作者Abhishek Chede
相关产品推荐
相关产品推荐

