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

C++初学者疑问:如何在函数中修改主函数声明的二维char数组

如何在自定义函数中修改C++二维数组?

嘿,作为C++初学者遇到数组传参的问题太正常啦!我来给你拆解清楚怎么在自定义函数func里修改你声明的char arr[10][10]二维数组~

方法1:直接传递指定大小的二维数组(最适配你的场景)

因为你的数组大小是固定的10x10,可以直接把数组作为参数传给函数。这里有两种等价的写法,本质都是利用数组传参时退化为指针的特性:

写法A:直观的数组形式参数

#include <iostream>
using namespace std;

// 直接声明参数为char arr[10][10]
int func(char arr[10][10]) {
    // 示例:修改数组中的元素
    arr[0][0] = 'A';  // 修改第0行第0列
    arr[3][5] = 'Z';  // 修改第3行第5列
    return 0;
}

int main(){
    char arr[10][10];
    
    // 先初始化数组(可选,避免垃圾值)
    for (int i = 0; i < 10; ++i) {
        for (int j = 0; j < 10; ++j) {
            arr[i][j] = '\0';
        }
    }
    
    func(arr);  // 传递数组给函数
    
    // 验证修改结果
    cout << "arr[0][0] = " << arr[0][0] << endl;  // 输出 A
    cout << "arr[3][5] = " << arr[3][5] << endl;  // 输出 Z
    return 0;
}

写法B:指针形式参数(等价于写法A)

在函数参数中,char arr[10][10]会被编译器自动转换为char (*arr)[10](指向包含10个char的一维数组的指针),所以你也可以直接写成这种指针形式,效果完全一样:

int func(char (*arr)[10]) {
    arr[0][0] = 'A';
    arr[3][5] = 'Z';
    return 0;
}

方法2:用C++标准库的std::array(更安全的选择)

如果你想脱离C风格数组的限制,使用更现代、安全的C++容器,可以用std::array。需要注意传递引用(&),避免拷贝整个数组:

#include <iostream>
#include <array>  // 必须包含这个头文件
using namespace std;

// 传递std::array的引用
int func(array<array<char, 10>, 10>& arr) {
    arr[1][1] = 'B';
    arr[5][2] = 'C';
    return 0;
}

int main(){
    array<array<char, 10>, 10> arr;
    
    // 快速初始化所有元素为'\0'
    for (auto& row : arr) {
        row.fill('\0');
    }
    
    func(arr);
    
    cout << "arr[1][1] = " << arr[1][1] << endl;  // 输出 B
    cout << "arr[5][2] = " << arr[5][2] << endl;  // 输出 C
    return 0;
}

关键原理说明

C风格的二维数组在传参时会退化为指针,所以必须指定第二维的大小(比如这里的10),这样编译器才能正确计算数组元素的内存偏移,找到对应的arr[i][j]位置。如果只写char arr[][]是不行的,编译器无法确定每一行的长度。

内容的提问来源于stack exchange,提问作者anonim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:57:29