如何将数组从指针传输到C上的主程序

Posted

技术标签:

【中文标题】如何将数组从指针传输到C上的主程序【英文标题】:How to transfer an array from a pointer to the main program on C 【发布时间】:2022-01-09 03:26:15 【问题描述】:

这是我一直在尝试运行的程序...

#include <stdio.h>
#define MAX 10

int suma_arreglo(int x1[], int x2[], int y);

int array1[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, array2[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
int *suma;

main()

    int cont = 0;

    suma = suma_arreglo(array1, array2, MAX);
    for(cont = 0; cont < MAX; cont++)
    
        printf("\n%d + %d = %d", array1[cont], array2[cont], *suma++);
    


    puts("");
    system("pause");



int suma_arreglo(int x1[], int x2[], int y)

    int cont, arraysum[y];

    for(cont = 0; cont < y; cont++)
    
        arraysum[cont] = x1[cont] + x2[cont];
        //printf("\n%d + %d = %d", x1[cont], x2[cont], arraysum[cont]);
    

    return arraysum;


但是由于某种原因,它不起作用,调试我注意到函数和程序工作正常,但是当我尝试将地址arraysum返回到主程序suma中的指针时问题就开始了......理论上应该是

suma = arraysum

这样它就可以在主程序上运行。无论如何,我认为我尝试将数组的数据取回主程序的方式仍然存在问题。

你们觉得呢?

【问题讨论】:

两个问题:首先suma_arreglo 被声明为int ,而不是指向int 的指针(即int *)。其次,您尝试返回指向 local 数组 arraysum 的第一个元素的指针。一旦函数返回arraysum 的生命周期结束并且指向它或其元素的任何指针都将变为无效。将指向现有数组的指针作为参数传递, 【参考方案1】:

这行得通:

#include <stdio.h>
#define MAX 10

int* suma_arreglo(int x1[], int x2[], int y, int* sum_arr_ptr);

int array1[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, array2[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
int *suma;

int sum_array1[MAX];

main()

    int cont = 0;

    suma = suma_arreglo(array1, array2, MAX, sum_array1);
    for(cont = 0; cont < MAX; cont++)
    
        printf("\n%d + %d = %d", array1[cont], array2[cont], *suma++);
    


    puts("");
    system("pause");



int* suma_arreglo(int x1[], int x2[], int y, int* sum_arr_ptr)



    for(int cont = 0; cont < y; cont++)
    
        sum_arr_ptr[cont] = x1[cont] + x2[cont];
        //printf("\n%d + %d = %d", x1[cont], x2[cont], arraysum[cont]);
    

    return sum_arr_ptr;


问题在于,首先,你给函数一个返回类型int,然后让它返回一个int*。其次,它返回了自己的局部变量。在函数体内本地创建的变量在函数完成后会消失,因此您无法返回这些变量。

这里我只是给函数引入了第四个参数,一个指向整数数组的int*指针,这样它就可以在最后返回正确的结果,而不是返回函数返回后不存在的东西.还将返回类型从int 固定为int*

PS。在函数内部创建变量时,您可以使用 static 关键字将其生命周期延长到函数体本身之外。在这种情况下,该变量只被初始化一次并一直存在到程序结束。

【讨论】:

男人!太感谢了!您对返回类型所说的很有意义,我只是没有考虑过。我刚开始学习编程,我觉得自己真的被那个程序困住了。我需要更多地研究关于第四个参数的东西,甚至可以尝试一下。无论如何,你的程序运行,谢谢。现在我知道如何从函数中返回指针值了;) 不客气,兄弟 :) 如果您需要更多帮助,可以在 Discord 上加我:KevinDaGrim#9485

以上是关于如何将数组从指针传输到C上的主程序的主要内容,如果未能解决你的问题,请参考以下文章

关于C中的结构,如何将数据从结构复制到字符串数组

将视频从 Raspberry Pi 流式传输到 Android 应用程序

如何将数据从 Java 桌面/Swing 应用程序发送/传输到 Java Web 应用程序 [重复]

ZZNUOJ_用C语言编写程序实现1159:逆序输出数组元素(指针专题)(附完整源码)

如何将数组从 PLC 程序传递到 TwinCAT 中的 C 模块实例?

黑马程序员 C++教程从0到1入门编程笔记1数据类型运算符程序流程结构数组函数指针结构体