C++存储奇数到数组并通过指针访问的实现及原书错误排查
问题排查及修复方案
核心错误点
- 数组初始化逻辑错误:原代码中
odds[i] = i + 1的赋值逻辑生成的是1~50的连续整数,不符合「存储前50个奇数」的要求。前N个奇数的通项公式为2*i + 1(i从0开始计数),替换即可修复数值错误。 - 可选优化点:逆序遍历循环中直接用
int类型接收size_t类型的n-1,如果数组规模超过int取值范围会出现溢出,可增加显式类型转换避免类型不匹配警告。
修复后的完整代码
// 存储奇数到数组并使用指针表示法访问 #include <iostream> #include <iomanip> int main() { const size_t n {50}; size_t odds[n]; for (size_t i {}; i < n; ++i) odds[i] = 2*i + 1; // 核心修改:生成第i+1个奇数 const size_t perline {10}; std::cout << "The numbers are:\n"; for (size_t i {}; i < n; ++i) { std::cout << std::setw(5) << *(odds + i); if ((i + 1) % perline == 0) std::cout << std::endl; } std::cout << "\nIn reverse order the numbers are:\n"; for (int i {static_cast<int>(n) - 1}; i >= 0; --i) // 显式类型转换避免类型不匹配警告 { std::cout << std::setw(5) << *(odds + i); if (static_cast<size_t>(i) % perline == 0) std::cout << std::endl; } return 0; }
内容的提问来源于stack exchange,提问作者konanrash
相关产品推荐
相关产品推荐

