You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:10:37