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

如何在C++中从函数获取两个不同数据类型的数组?

问题解答

首先明确:你给出的代码完全不可行,核心问题集中在这几点:

  1. 局部数组的生命周期失效:fun()里的array和array2是栈上的局部变量,函数执行完毕后,这块内存会被系统回收,返回它们的指针(数组名会隐式转为首元素指针)得到的是野指针,后续访问会触发未定义行为。
  2. 函数无法返回多个值:C语言函数只能返回单个值,你写的return array,array2;是逗号表达式,实际只会返回array2的地址,而且类型是char*,和main里的int array1类型不匹配,编译直接报错。
  3. 数组不能直接赋值:数组名是常量指针,不能用=直接赋值,array1=fun();这种写法本身就不符合C语法,编译阶段就会报错。

正确实现方法

方法1:通过指针参数传递,让函数填充数组内容

把main里已分配好内存的数组指针传给函数,函数直接往目标数组里写入数据,彻底避免局部数组销毁的问题:

#include <string.h>

void fun(int *int_arr, char *char_arr) {
    // 给int数组赋值
    int temp_int[] = {1,2,3,4};
    memcpy(int_arr, temp_int, sizeof(temp_int));
    // 给char数组赋值
    char temp_char[] = {'a','b','c'};
    memcpy(char_arr, temp_char, sizeof(temp_char));
}

int main(){
    int array1[4];
    char array2[3];

    // 传入数组指针,函数直接填充数据
    fun(array1, array2);

    // 此时可正常使用array1和array2
    return 0;
}

方法2:用结构体封装两个数组,函数返回结构体

结构体可以容纳不同类型的数组,函数直接返回整个结构体(当前数组规模较小,不会触发栈溢出):

#include <string.h>

// 定义包含两个数组的结构体
typedef struct {
    int int_arr[4];
    char char_arr[3];
} ArrayBundle;

ArrayBundle fun() {
    ArrayBundle bundle;
    // 赋值int数组
    int temp_int[] = {1,2,3,4};
    memcpy(bundle.int_arr, temp_int, sizeof(temp_int));
    // 赋值char数组
    char temp_char[] = {'a','b','c'};
    memcpy(bundle.char_arr, temp_char, sizeof(temp_char));
    return bundle;
}

int main(){
    ArrayBundle data = fun();
    // 使用data.int_arr和data.char_arr即可
    return 0;
}

方法3:使用静态数组(不推荐频繁使用)

把函数里的数组声明为static,使其生命周期覆盖整个程序运行期,返回的指针不会失效,但静态数组是全局共享的,多次调用函数会覆盖之前的数据,线程不安全:

#include <string.h>

void fun(int **int_ptr, char **char_ptr) {
    static int array[4] = {1,2,3,4};
    static char array2[3] = {'a','b','c'};
    *int_ptr = array;
    *char_ptr = array2;
}

int main(){
    int *array1;
    char *array2;

    fun(&array1, &array2);
    // 可使用array1和array2,但注意不要修改静态数组内容(后续调用fun会覆盖)
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:10:25