C++数组传递给打印函数问题:作用域错误求解
解决方法
方案1:将数组作为参数传递给pMenu函数
这是最规范的做法,通过参数传递让pMenu函数获得数组的访问权限。
修改pMenu的函数声明和定义,增加数组参数和大小参数:
#include <iostream> using namespace std; // 函数声明 void pMenu(int baseArray[], int copyArray[], int size); void arrayPrint(int arr[], int size); // 数组打印函数 void arrayPrint(int arr[], int size) { for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } // 菜单函数 void pMenu(int baseArray[], int copyArray[], int size) { int choice; do { cout << "1. 打印baseArray" << endl; cout << "2. 打印copyArray" << endl; cout << "0. 退出" << endl; cin >> choice; switch(choice) { case 1: arrayPrint(baseArray, size); break; case 2: arrayPrint(copyArray, size); break; case 0: cout << "退出程序" << endl; break; default: cout << "无效选项,请重新输入" << endl; } } while(choice != 0); } int main() { int size; cout << "输入随机数数量:"; cin >> size; // 动态分配数组,避免栈溢出问题 int* baseArray = new int[size]; int* copyArray = new int[size]; // 生成随机数填充数组示例 for (int i = 0; i < size; i++) { baseArray[i] = rand() % 100; copyArray[i] = baseArray[i]; } // 将数组和大小传入菜单函数 pMenu(baseArray, copyArray, size); // 释放动态分配的内存 delete[] baseArray; delete[] copyArray; return 0; }
如果用静态数组(比如int baseArray[100];),传递方式完全一致,但静态数组的大小必须是编译期常量,灵活性不如动态数组。
方案2:使用全局变量(不推荐)
把baseArray、copyArray和数组大小声明在所有函数外部,这样所有函数都能直接访问。但全局变量会提升代码耦合度,不利于后续维护,除非特殊场景不建议使用:
#include <iostream> using namespace std; // 全局变量声明 int* baseArray; int* copyArray; int arrSize; void arrayPrint(int arr[], int size) { for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } void pMenu() { int choice; do { cout << "1. 打印baseArray" << endl; cout << "2. 打印copyArray" << endl; cout << "0. 退出" << endl; cin >> choice; switch(choice) { case 1: arrayPrint(baseArray, arrSize); break; case 2: arrayPrint(copyArray, arrSize); break; case 0: cout << "退出程序" << endl; break; default: cout << "无效选项,请重新输入" << endl; } } while(choice != 0); } int main() { cout << "输入随机数数量:"; cin >> arrSize; baseArray = new int[arrSize]; copyArray = new int[arrSize]; // 填充随机数 for (int i = 0; i < arrSize; i++) { baseArray[i] = rand() % 100; copyArray[i] = baseArray[i]; } pMenu(); delete[] baseArray; delete[] copyArray; return 0; }
方案3:用std::vector替代原生数组
C标准容器std::vector比原生数组更安全灵活,传递时可以直接传引用(避免不必要的拷贝),还能直接通过size()方法获取数组长度,是更推荐的现代C写法:
#include <iostream> #include <vector> #include <cstdlib> using namespace std; void arrayPrint(const vector<int>& arr) { for (int num : arr) { cout << num << " "; } cout << endl; } void pMenu(const vector<int>& baseArray, const vector<int>& copyArray) { int choice; do { cout << "1. 打印baseArray" << endl; cout << "2. 打印copyArray" << endl; cout << "0. 退出" << endl; cin >> choice; switch(choice) { case 1: arrayPrint(baseArray); break; case 2: arrayPrint(copyArray); break; case 0: cout << "退出程序" << endl; break; default: cout << "无效选项,请重新输入" << endl; } } while(choice != 0); } int main() { int size; cout << "输入随机数数量:"; cin >> size; vector<int> baseArray(size); vector<int> copyArray(size); // 填充随机数 for (int i = 0; i < size; i++) { baseArray[i] = rand() % 100; copyArray[i] = baseArray[i]; } pMenu(baseArray, copyArray); return 0; }
内容的提问来源于stack exchange,提问作者Sorted Sand
相关产品推荐
相关产品推荐

