C语言调用数组返回数组怎么做?

假如有数组a[5]={1,2,3,4,5}和数组b[5];实现调用子函数add_1,从而返回一个数组,赋值给数组b[5],请问应该怎么实现?要求具体的程序,用C语言实现。谢谢

#include <stdio.h>

#define MIN(x,y)

int * add_1();

main()

{

int * p = add_1();

int b[5];

for(int i=0;i<5;i++)

{

b[i] = *(p+i);

}

for(i=0;i<5;i++)

{

printf("%d",b[i]);

}

}

int * add_1()

{

int static a[5]={1,2,3,4,5};

return a;

}

扩展资料:

注意事项

一、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。

可以是全局变量,静态局部变量,动态分配内存,以及从函数参数传过来的数组地址。

二、返回指针时,无法返回长度,所以需要其它方式传回数组长度,以下是几种常用的方法。

1、约定固定长度。

2、以函数参数返回数组长度。

3、将长度保存在全局变量中。

4、约定数组结束标记。

5、在数组中存储数组长度,如存在第一个元素中。

有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。

例如指针:

#include <stdio.h>

char *test(char *tmp)

{

return tmp;

}

void main(void)

{

printf("%s",test("第一个测试例子\n"));

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27

C语言调用数组返回数组可用两种形式实现:

1、通过参数返回数组

void add_1( int a[], int n, int b[] ) 
{
    int  i;
    for( i=0;i<n;i++ )
        b[i]=a[i]+1;
}

2、返回动态分配数组(指针,需要调用者free释放)

#include <stdlib.h> //动态分配内存malloc需要引用该头文件
int *add_2( int a[], int n )
{
    int *pb=(int *)malloc(n*sizeof(int) ); //动态分配数组
    int i;
    for( i=0;i<n;i++ )
        pb[i]=a[i]+2;
return pb; //返回数组首地址。
}

主程序:

#include <stdio.h>
void main()
{
    int a[]={1,2,3,4,5},b[5];
    int *pb;
    int i;
    add_1( a, 5, b );
    for( i=0;i<5;i++ )
        printf("%d: %d\n", a[i], b[i] );
    pb=add_2( a, 5 );
    for( i=0;i<5;i++ )
        printf("%d: %d\n", a[i], pb[i] ); //pb就可以按数组使用
    free(pb); //释放内存
}

本回答被网友采纳
第2个回答  推荐于2017-11-25
#include <stdio.h>
#define MIN(x,y)

int * add_1();

main()
{

int * p = add_1();

int b[5];
for(int i=0;i<5;i++)
{
b[i] = *(p+i);

}
for(i=0;i<5;i++)
{
printf("%d",b[i]);
}

}
int * add_1()
{
int static a[5]={1,2,3,4,5};

return a;
}追问

将数组a调用子函数add_1,子函数add_1的功能是数组a中的各个元素加1,返回的也是一个数组,并且将它赋值给数组b,我想实现的是这个意思,不知道我说明白了没有?

追答

这个还要我改吗 返回数组的步骤已经给你了 只要把a数组+1不就可以了吗?

追问

我想说的是数组a经过加一之后再赋值给b数组,类似于b=add_1(a)的样子,能帮我写一下吗?谢谢

追答

这样子的数组的返回貌似不能直接赋值
#include
#define MIN(x,y)

int * add_1(int a[]);

main()
{
int a[5]={1,2,3,4,5};

int * p = add_1(a);

int b[5];
for(int i=0;i<5;i++)
{
b[i] = *(p+i);

}
for(i=0;i<5;i++)
{
printf("%d",b[i]);
}

}
int * add_1(int a[])
{
for(int i=0;i<5;i++)
{
a[i] = a[i]+1;
}

return a;
}

本回答被提问者采纳
第3个回答  2012-05-12
你是要赋值还是返回?追问

将数组a调用子函数add_1,子函数add_1的功能是数组a中的各个元素加1,返回的也是一个数组,并且将它赋值给数组b,我想实现的是这个意思,不知道我说明白了没有?

第4个回答  2012-05-12
return()这个函数
相似回答