执行下面程序,输出结果是( )。
int divi(int a,int b){
if(b==0) throw 0;
return a/b;
}
int main(){
try{
cout << divi(10,0);
}catch(const char* msg){
cout << "A";
}catch(int){
cout << "B";
}
}答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】异常处理(try-catch)|类型匹配(throw vs catch)|C++类型系统(int vs const char*)
1. 🎯 考纲定位 GESP四级 C++ 异常处理模块。命题人把这道题放在这里,就是要卡死"把 throw 0 当成字符串"这个直觉陷阱——学生看到 catch(const char* msg) 就下意识去配"0",却忘了 0 是 int 类型。
2. 🧠 解题思维
3. 🪤 陷阱拆解
4. 🔄 反命题思维 如果我把 throw 0 改成 throw "A",那 catch(const char* msg) 就能捕获,输出变 A;如果改成 throw 0.0,则需要 catch(double) 或 catch(float) 才能匹配。刷到类似题先问自己:抛出的到底是什么类型?