问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++如何返回一个数组

发布网友 发布时间:2022-05-14 10:51

我来回答

5个回答

热心网友 时间:2023-08-04 06:53

可以使用静态变量进行返回、用指针传递、通过返回传入数组的指针三种方法实现;
代码分别如下:
// 方法1,用静态变量进行返回
char *SubFunction(void)
{
static char szText[5] = "adfa"; // 用静态空间
//对p进行赋值操作
return szText;
}
void Caller() // 这个函数调用SubFunction
{
TRACE("%s\n", SubFunction);
}

// 方法2,用指针传递
void SubFunction(char *pText1, char *pText2)
{
// 对pText1, pText2运算
strcpy(pText1, "love");
strcpy(pText2, "you");
return;
}
void Caller() // 这个函数调用SubFunction
{
char szText1[5], szText2[5]; // 当然这里也可以动态分配内存
SubFunction(szText1, szText2); // szText1, szText2就是带回的值
TRACE("%s %s\n", szText1, szText2);
}

方法3 通过返回传入数组的指针
#include<stdio.h>
double *copy1(double array[],double c1[],int n);
double *copy2(double array[],double c2[],int n);
void main(void)
{
int size=4;
double source[4]={1,2.3,4.5,6.7};
double first_copy[4];
double second_copy[4];
double *fp,*sp;
fp=copy1(source,first_copy,size);
printf("The first copy: %f,%f,%f,%f\n",fp[0],fp[1],fp[2],fp[3]);
sp=copy2(source,second_copy,size);
printf("The second copy: %f,%f,%f,%f\n",sp[0],sp[1],sp[2],sp[3]);
}
double *copy1(double array[],double c1[],int n)
{
int i;
for(i=0;i<n;i++)
c1[i]=array[i];
return c1;
}
double *copy2(double array[],double c2[],int n)
{
double *p;
int i;
for(i=0;i<n;i++)
{
p=&array[i];
c2[i]=*p;
}
return c2;
}

热心网友 时间:2023-08-04 06:53

在C/C++中是不允许返回数组的,只能返回数组的指针。但这样做危险性很大,如果返回的是被调函数中定义的自动型数组,函数结束后数组空间已经不受代码控制了,通过返回的指针在主调函数中操作这块空间会产生不可预料的结果。所以一般应在主调函数中声明数组,把它的指针传给被调函数,在被调函数中通过这个指针直接操作主调函数中的数组。也可以在被调函数中动态声明数组,将它的指针返回给主调函数进行后续操作,但不能忘记在操作完毕后释放动态数组,不然会产生内存泄漏问题……

热心网友 时间:2023-08-04 06:54

没看你写的代码,我就帖一个我之前自己写的让数组反转的函数,ary1反转后给ary3,看看能不能给你些启发
void main{
int ary1[10]={1,2,3,4,5,6,7,8,9,10};

int *ary2=Turn(ary1,10);

int ary3[10];

int i=10;

while(i){
i--;
ary3[i]=ary2[i];
}



int *Turn (int *data,int i){

int *p=data;
int *q=p+i-1;

while (p<q){
int temp = *p;
*p = *q;
*q = temp;

p++;
q--;
}

return data;

}

热心网友 时间:2023-08-04 06:55

可以把数组作为函数参数,或者直接返回数组头指针

热心网友 时间:2023-08-04 06:55

返回的是数组的首地址,原程序中语句"fun(a,b)==set(c)"比较的是两个数组的首地址是否相等,因为系统对他们分配的空间肯定不一样,所以不会相等,应改为比较两地址开始的空间内容.
所以可以用两个指针或两个数组接收函数传来的地址,然后比较。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...总是被情所困?要怎么样才能控制自己,对他不要那么在呼? 关于@synchronized,你所不知道的事情 怎么样才算得上熟悉多线程编程? 大学期间,有必要考驾照吗 酸奶怎么做奶酪 酸奶:奶酪 一个女人的在保安室用掐带把男保安勒死了这是什么电影 开场就是一个老头被钢绳给勒死,那是啥电影 鱼城镇下辖村 顾楼村位于哪个市 require 和requires的用法疑问 c如何返回一个数组 芝士焗饭在学校卖会欢迎吗? 大学食堂做芝士焗饭可以吗 我有一个九阳豆浆机做豆浆的过程很正常就是做完豆浆在最后煮豆浆时重复加热不停止,都把豆浆熬的很少了... 敬请高手指点-有一个老式九阳豆浆机起动几分钟电机直转几秒就停机,但能继续加热烧开。这是什么原因? 在ACCESS中建立按钮导出EXCEL 请问一下access中窗体导出excel怎么实现,谢谢啊 怀孕五个月今天突然头晕恶心想吐 心慌意识不到想大便怎么回事 ???怎么回事 怀孕五个月了老感觉胸闷恶心为什么呢? 快门1/500,是什么意思 怀孕五个月多了,最近又开始恶心呕吐正常吗 我怀孕5个多月了有的时候肚子不舒服还想吐。请问是怎么了 快门上的数字表示什么,数字越大,表示什么 怀孕5个月了 老是恶心想吐是正常的不 好担心 怀孕已经五个月了,但是还天天呕吐,有什么好的办法可以调理一下吗? 快门如何表示 怀孕快五个月了,为什么这几天肚子好胀,还好想吐,吃点东西就难受的要死? 摄影中,焦距,光圈,快门速度等分别用哪个字母表示 三星打印机SCX-4321F怎么加墨啊 那个蓝管打不开的。 知道的回我个,在线... C语言返回数组怎样表示 - 信息提示 南方什么时候开始明显降温 江西地区 齐商银行贷春风贷没有利息吗 今年什么时候降温啊? 湖南哪天开始降温? 中国天气大约什么时候开始冷 着床降温发生在第几天 齐商银行20i6年10万元存五年利律是多少 伦文叙老点柳先开这片电影的角色名字 电影伦文叙老点柳先开里面的程晴是谁演的 伦文叙老点柳先开里千户大人的扮演者是谁 电影《伦文叙老点柳先开》中的女主角是谁? 伦文叙老点柳先开里演伦文叙的老母扮演者是谁 张卫健拍电视剧里面有个叫什么柳文开的 这个人是谁?(在电影《伦文叙老点柳先开》中扮演千户的演员是谁?) 伦文叙老点柳先开的介绍 香港老电影《伦文叙老点柳先开》里吴孟达演得校长的女儿是哪个女演员 伦文叙老点柳先开高清完整版电影 柳先开是谁演的