C语言 怎么返回一个数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 怎么返回一个数组相关的知识,希望对你有一定的参考价值。

但return它的指针的时候, 编译器会警告function returns address of local variable[enabled by default]

你想返回一个数组,因为你在一个函数内创建了数组,属于局部变量,所以他在stack部分,而stack部分是用后类似于销毁的,你返回的地址类似于一块垃圾的地址,所以编译警告。你要想返回函数内创建的数组地址的话需要

//inside a function

    // n is the size of the array;
    int* array = (int *)malloc(sizeof(int)*n);
    
    /*
        do something with array
    */
    return array;

这样这个数组建立在heap堆上,调用完函数还在,而你返回了那个堆上数组的首地址,这样就没问题了。


用完free(array);


楼上用static不推荐,用static的话会在整个程序的run time运行时都占用空间。而是用malloc,动态申请释放更合理。

追问

我应该在哪里free呢..?

追答

这个函数返回的是一个指针   

int* p = aboveFunction(...);
// code
free(p);

参考技术A 1、在void strcat()的strcat前添加*,表示返回char 指针。
2、strcat()应该返回str1,即 return str1。str1是连接的结果,调用者有责任确保str1数组空间足够大,以便在其尾部添加str2后,不会覆盖其他数据空间。
参考技术B 不需要return返回,数组操作的是地址,只要你在被调函数里对数组操作了,主函数里的数组也是会变得,把子函数的return部分去掉就可以了。。。。。指针也是调用地址的,一样的,都不用返还值,都不用return 参考技术C 好像,使用指针是不需要返回值RETURN 的。 使用指针函数直接是形参与实参共用同一片内存空间,形参变化了,实参也就变化了。因此,直接使用 void函数就好。 参考技术D 在定义数组时,前面加上static,如:
static char str[100] ;

c语言如何返回一个数组?

extend()函数返回数组amounts怎么改?

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

double extend(double[],double[]);

int main()
double price[] = 10.62,14.89,13.21,16.55,18.62,9.47,6.58,18.32,12.15,3.98;
double quantity[] = 4,8.5,6,8.35,9,15.3,3,5.4,2.9,4.8;
double amount[10];
int i;

extend(price,quantity);

for (i = 0; i < 10; i++)
printf("%lf\n", amount[i]);


printf("\n");
return 0;


double extend(double prices[], double quantities[])
int i;
double amounts[10];

for (i = 0; i < 10; i++)
amounts[i] = prices[i] * quantities[i];


return amounts;

只能返回一个数,数组不能返回,以数组为函数参数传给形参时,由于是数组名传递(地址传递),实参和形参共用一段内存,对形参更改时实参的值也会改变,所以不需要返回值 参考技术A 只能返回一个数,数组不能返回,以数组为函数参数传给形参时,由于是数组名传递(地址传递),实参和形参共用一段内存,对形参更改时实参的值也会改变,所以不需要返回值 参考技术B return amounts;
你返回的是地址,所以函数类型应该是指针型的才能返回。
即 * extend
参考技术C double extend(double prices[], double quantities[])
int i;
double amounts[10];

for (i = 0; i < 10; i++)
amounts[i] = prices[i] * quantities[i];


return amounts; //栈中局部变量,返回后其内存为垃圾值

改成:

double *extend(double[],double[]);

int main()
double price[] = 10.62,14.89,13.21,16.55,18.62,9.47,6.58,18.32,12.15,3.98;
double quantity[] = 4,8.5,6,8.35,9,15.3,3,5.4,2.9,4.8;
//double amount[10];
double *amount;
int i;

amount = extend(price,quantity);

for (i = 0; i < 10; i++)
printf("%lf\n", amount[i]);


delete[] amount; //释放内存

printf("\n");
return 0;


double *extend(double prices[], double quantities[])
int i;
//double amounts[10];
double *amounts = new double[10];
for (i = 0; i < 10; i++)
amounts[i] = prices[i] * quantities[i];


return amounts; //可以返回指针
本回答被提问者和网友采纳
参考技术D #include<stdio.h>
#include<stdlib.h>

double extend(double[],double[],double *p);

int main()

double price[] = 10.62,14.89,13.21,16.55,18.62,9.47,6.58,18.32,12.15,3.98;
double quantity[] = 4,8.5,6,8.35,9,15.3,3,5.4,2.9,4.8;
double amount[10];
int i;

int j = extend(price,quantity, amount);

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

printf("%lf\n", amount[i]);


printf("\n");
return 0;

//传入要返回的数组名,函数返回数组的大小
int extend(double prices[], double quantities[],double *p)

int i;

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

*(p+i)= prices[i] * quantities[i];


return i;

以上是关于C语言 怎么返回一个数组的主要内容,如果未能解决你的问题,请参考以下文章

C语言函数中怎么返回一个二维数组

C语言中函数调用怎么返回两个值

C语言中,return语句怎么样返回一个数组?

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

在C语言中,怎么样定义结构体数组为全局变量?定义一个无返回值的函数,但是函数有参数可以吗?

c语言中,定义一个函数,函数输出结果是一个数组,整个的形式是怎么样的?