C++打印结构体地址时输出异常值而非预期内容的问题求解
C++ 结构体地址打印异常问题解决
错误诱因
- 你编写的
print_address函数内部额外定义了未初始化的局部StreetAddress类型变量s,全程没有使用传入的有效address参数 - 局部变量
s的house_number为未初始化的int类型,读取时会输出内存中的随机垃圾值,street_name为默认初始化的空字符串,因此无法输出预期的地址内容
修复方案
直接删除多余的局部变量s定义,使用传入的address参数读取成员值即可,修正后的函数实现如下:
void print_address(StreetAddress address, bool number_first) { if(number_first) cout << address.house_number << " " << address.street_name; else cout << address.street_name << " " << address.house_number; }
可选优化
可以将结构体参数改为const引用传递,避免不必要的结构体拷贝开销,修改后的函数声明与实现如下:
// 函数声明修改 void print_address(const StreetAddress& address, bool number_first); // 函数实现修改 void print_address(const StreetAddress& address, bool number_first) { if(number_first) cout << address.house_number << " " << address.street_name; else cout << address.street_name << " " << address.house_number; }
修改后运行即可输出和预期一致的结果。
内容的提问来源于stack exchange,提问作者ASM student
相关产品推荐
相关产品推荐

