Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将数组从函数传递到主函数_C_Arrays_Function - Fatal编程技术网

C 将数组从函数传递到主函数

C 将数组从函数传递到主函数,c,arrays,function,C,Arrays,Function,在C中,如何将数组从函数传递到main #include<stdio.h> int merge(int a[],int b[]) { int i=0; int j=0; int k=0; int c[17]; while(i<10&&j<8) { if(a[i]<b[j]) { c[k]=a[i]; i++;

在C中,如何将数组从函数传递到main

#include<stdio.h>
int merge(int a[],int b[])
{
    int i=0;
    int j=0;    
    int k=0;
    int c[17];
    while(i<10&&j<8)
    {
        if(a[i]<b[j])
        {

            c[k]=a[i];
            i++;
        }
        else
        {
            c[k]=b[j];
            j++;
        }
        k++;
    }
    while(i<10)
    {
        c[k]=a[i];
        i++;
        k++;
    }
    while(j<10)
    {
        c[k]=b[j];
        j++;
        k++;
    }
    return c;
}
#包括
整数合并(整数a[],整数b[]
{
int i=0;
int j=0;
int k=0;
INTC[17];

而(i如果希望函数返回数组,有两种方法:

  • 函数必须返回指向数组中第一项的指针(实际上数组本身是C中的指针)。在这种情况下,函数必须声明为
    int*merge(int a[],int b[])
  • 您必须将数组传递给将由函数本身修改的函数。您可以这样做:
    int merge(int A[],int B[],int C[])

  • 如果希望函数返回数组,有两种方法:

  • 函数必须返回指向数组中第一项的指针(实际上数组本身是C中的指针)。在这种情况下,函数必须声明为
    int*merge(int a[],int b[])
  • 您必须将数组传递给将由函数本身修改的函数。您可以这样做:
    int merge(int A[],int B[],int C[])
  • 一种解决方案是采用三个阵列参数:

    void merge(int a[], int b[], int c[]);
    
    然后您可以合并
    a
    b
    并将结果放入
    c
    。调用该函数的人负责创建用作
    c
    的数组,使其足够大。

    一种解决方案是取三个数组参数:

    void merge(int a[], int b[], int c[]);
    

    然后您可以合并
    a
    b
    并将结果放入
    c
    中。调用该函数的人负责创建用作
    c
    的数组,使其足够大。

    这里有三个想法

  • 在C中不能返回数组,但可以返回包含数组的
    struct
    ,因此可以这样做
  • 如果您只说
    intx[3];return x;
    将返回
    x的地址。
    如果它是静态的或malloc-ed的,这没关系,但是如果它是一个普通的本地自动存储类,它将丢失得很厉害。 因此,无论您做什么,都应该
    malloc(3)
    函数中的对象,或者至少使其成为静态的
  • 您可以将新数组作为参数传递,从而避免返回它的问题

  • 这里有三个想法

  • 在C中不能返回数组,但可以返回包含数组的
    struct
    ,因此可以这样做
  • 如果您只说
    intx[3];return x;
    将返回
    x的地址。
    如果它是静态的或malloc-ed的,这没关系,但是如果它是一个普通的本地自动存储类,它将丢失得很厉害。 因此,无论您做什么,都应该
    malloc(3)
    函数中的对象,或者至少使其成为静态的
  • 您可以将新数组作为参数传递,从而避免返回它的问题


  • 还有。你的问题没有意义。你想让你的函数返回一个数组吗?先生,我的目标是组合两个数组并将新数组返回给主函数。我已经正确地进行了缩进,但是代码在站点上没有正确地读取。你可以很容易地传递指针。你的尝试怎么会失败呢?很抱歉侄女..还有。你的问题没有意义。你想让你的函数返回一个数组吗?先生,我的目标是组合两个数组,然后将新数组返回给主函数..我已经正确地进行了缩进,但是代码在站点上没有正确的可读性..你可以很容易地传递指针。你的尝试怎么会失败?很抱歉Incovincence..不,不,不。数组不是指针。它们在传递时会衰减为指针,但它们是不同的数据类型。@StoryTeller很高兴知道,我认为它是指向数组第一个元素的指针。谢谢:)我不确定你是否在讽刺。但要想看出区别,最确切的方法是将数组声明为print,它的大小是
    sizeof
    。而不是将指针声明为print。你可能还想在选项1中添加一个警告,即返回的指针不能指向局部变量。@StoryTeller你是对的,我想:)还找到了更多信息此处的信息:不,不,不。数组不是指针。它们在传递时会衰减为指针,但它们是不同的数据类型。@StoryTeller很高兴知道,我认为它是指向数组第一个元素的指针。谢谢:)我不确定你是否在讽刺。但要想看出区别,最确切的方法是声明一个数组打印它的大小是
    sizeof
    。而不是使用指针。您可能还希望在选项1中添加一个警告,即返回的指针不能指向局部变量。@StoryTeller您是对的,我想:)还可以在此处找到更多信息: