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

C语言中如何将函数生成的数组传递到另一个函数并复制

嘿,我来帮你搞定这个数组传递的问题~你的代码里现在有个关键问题:C语言里不能直接返回数组类型,所以return tal;这行是错误的,而且Tal[] = randomtal();这种数组赋值方式也不合法。下面给你几种实用的实现方案:

方案1:直接传递目标数组作为参数(最推荐)

这种方式不需要返回值,直接把要填充的数组传给randomtal函数,在函数内部完成随机数填充,简单高效还不用操心内存管理:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 把要填充的数组和长度作为参数传入
void randomtal(int tal[], int size) { 
    // 注意:srand最好只调用一次,比如放在程序入口,避免短时间重复调用生成相同随机序列
    for(int loop = 0; loop < size; loop++){ 
        tal[loop] = rand() % 10 + 1; // 生成1-10的随机整数
    } 
} 

int upp1(int argc, const char * argv[]) { 
    int Tal[10]; 
    srand(time(0)); // 初始化随机数种子,放在这里只执行一次
    randomtal(Tal, 10); // 直接填充Tal数组
    
    // 可以加段代码验证结果
    for(int i = 0; i < 10; i++){
        printf("%d ", Tal[i]);
    }
    return 0; 
}

原理:C语言里数组作为函数参数时会退化为指针,所以randomtal里对tal的修改,直接作用在传入的Tal数组上。

方案2:动态分配内存返回指针

如果需要在堆上存储数组(比如数组大小不固定),可以用malloc动态分配内存,返回指针。但记得使用完要手动释放内存,避免泄漏:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int* randomtal(int size) { 
    // 动态分配内存,检查是否分配成功
    int *tal = malloc(size * sizeof(int));
    if(tal == NULL){
        perror("malloc failed");
        return NULL;
    }
    for(int loop = 0; loop < size; loop++){ 
        tal[loop] = rand() % 10 + 1; 
    } 
    return tal; 
} 

int upp1(int argc, const char * argv[]) { 
    srand(time(0));
    int *Tal = randomtal(10); 
    if(Tal == NULL){
        return 1; // 分配失败直接退出
    }
    
    // 验证结果
    for(int i = 0; i < 10; i++){
        printf("%d ", Tal[i]);
    }
    
    free(Tal); // 记得释放内存!
    return 0; 
}

方案3:用结构体包裹数组返回

C语言允许返回结构体类型,所以可以把数组放进结构体里,直接返回整个结构体副本,适合固定大小的数组场景:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 定义包含10个int的结构体
typedef struct {
    int nums[10];
} IntArray10;

IntArray10 randomtal(void) { 
    IntArray10 arr;
    for(int loop = 0; loop < 10; loop++){ 
        arr.nums[loop] = rand() % 10 + 1; 
    } 
    return arr; 
} 

int upp1(int argc, const char * argv[]) { 
    srand(time(0));
    IntArray10 Tal = randomtal(); 
    
    // 验证结果
    for(int i = 0; i < 10; i++){
        printf("%d ", Tal.nums[i]);
    }
    return 0; 
}

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:00