c++如何返回一个数组

作者&投稿:钟离莎 (若有异议请与网页底部的电邮联系)
C++中如何使函数返回数组~

在C++中,数组不是一种类型,因此不能被直接返回。一般有两种方法来返回一个数组。1.
返回一个指向数组的指针
#include<iostream
using namespace std;
int* Array(){int *a;
a=new int [10];
for(int i=0;i<10;i++){a[i]=i+1;
cout<<a[i]<<"";}
cout<<endl;return a;}void main(){int *b;b=Array();
for(int i=0;i<10;i++)
cout<<b[i]<<"";
cout<<endl;}2.
返回一个结构的形式。这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,也可以避免访问悬挂指针造成的错误。但缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。
#include<iostream
using namespace std;class tag{public:int a[10];}X;class tag Array(){
for(int i=0;i<10;i++){
X.a[i]=i+1;
cout<<X.a[i]<<"";}
cout<<endl;return X;}void main(){
class tag Y=Array();
for(int i=0;i<10;i++){

有两种方法可以实现。

为方便说明,定义两个整型数组a,b,并实现将a中的值赋值到b中。
int a[4] = {1,2,3,4}, b[4];

1、 通过数组遍历,逐个赋值。
定义循环变量int i;
for(i = 0; i < 4; i ++)
b[i] = a[i];
该程序功能为遍历数组a,逐个赋值到数组b对应元素中。

2、 借助内存复制函数memcpy,整体赋值。
void *memcpy(void *dst, void *src, size_t size);
这个函数的功能为将src上,大小为size字节的数据赋值到dst上。
调用该函数时需要引用头文件cstring,即
#include
赋值数组的代码为
memcpy(b,a,sizeof(a));

可以使用静态变量进行返回、用指针传递、通过返回传入数组的指针三种方法实现;
代码分别如下:
// 方法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;
}

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

没看你写的代码,我就帖一个我之前自己写的让数组反转的函数,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;

}

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

返回的是数组的首地址,原程序中语句"fun(a,b)==set(c)"比较的是两个数组的首地址是否相等,因为系统对他们分配的空间肯定不一样,所以不会相等,应改为比较两地址开始的空间内容.
所以可以用两个指针或两个数组接收函数传来的地址,然后比较。


EXCEL如何满足多个条件返回一个数值?
1、在电脑中找到需要操作的EXCEL表格文档,如下图所示,进入下一步。2、例如在B列中输入需要判断的数据,如下图所示,然后进入下一步。3、在需要返回数值的单元格中,进入编辑状态,然后输入公式=IF(OR((B4>=3000)*(B4<=3500),(B4>=4000)*(B4<=5000),(B4>=5900)*(B4<=6300)),6,8),...

如何用IF返回一组数据的第一个值
VLOOKUP函数的基本语法是:VLOOKUP(查找值,数据区域,返回列数,精确匹配)。其中,查找值是需要匹配的值;数据区域是要进行匹配的数据范围;返回列数是要返回的列数;精确匹配是一个逻辑值,如果为TRUE则进行精确匹配,为FALSE则进行模糊匹配。例如,我们要根据产品名称在产品数据表中查找产品价格,可以使用以下...

excel如何判断一个数在哪个区间并返回一个值
1、打开所需操作的数据表,如图,需要将各位同学的成绩按照右侧规则划分为ABCD四等。2、首先,构建一个范围,因为[0-60)为D,则0设为D,[60-80)为C,则设置60为C,以此设置B和A,如图。3、点击鼠标左键,选中单元格C2。4、输入VLOOKUP函数,其中参考值为B2,查找区间为我们构建的范围($I$2:...

如何在EXCEL中返回一个数所在的位置
如果 match_type 为 -1,函数 MATCH 查找大于或等于 lookup_value 的最小数值。Lookup_array 必须按降序排列:TRUE、FALSE、Z-A、...、2、1、0、-1、-2、...,等等。如果省略 match_type,则假设为 1。说明 函数 MATCH 返回 lookup_array 中目标值的位置,而不是数值本身。例如,MATCH("b"...

如何在一列数值中找到特定的一个数值,然后返回同行的一个数值?_百度知 ...
即:在(查找范围)首列查找到特定的(第)一个数值(查找值),然后返回同行(指定位置)的值,采取<模糊查找>或<精确查找>方式。“指定位置<由首列开始的第几列>”为>=1的数字(整数),所以只能向右查找,如果需要查找结果在首列左边,则返回错误。所以,使用技巧:使用VLOOKUP()函数进行查找时,...

Excel根据条件返回一个数。
=IFNA(VLOOKUP(A2,$A$1:B1,2,0),MAX($B$1:B1)+1)下拉

如何让一个公式中数据正确时返回1,错误时返回0?
=IF(B1="",0,A1-B1)说明:如果B1为空,则结果为0,否则结果为A1-B1。=IFS(B1="",0,A1=1,1)说明:如果B1为空,则结果为0,并且如果A1=1,则结果为1。以上这些函数都是当数据符合条件的时候可以自定义计算结果为某一个值的。通过例子看一下,图1为公式比较,图2为结果比较:

Excel中如何返回一行内第一个非零数值
,再用LOOKUP函数将实际数值返回。公式为=LOOKUP(0,0\/(1:1<>0),1:1) 。用INDEX函数和MATCH函数组合解决:先用MATCH函数定位到第一个非零非空的数值的列号,再通过INDEX函数返回该数值。公式为=INDEX(1:1,MATCH(TRUE,1:1<>0,)) 该公式需要按组合键Ctrl+Shift+enter结束。

如何返回excel表格一个单元格里指定的数据?
可以使用mid函数,如下:MID字符串函数,作用是从一个字符串中截取出指定数量的字符 MID(text, start_num, num_chars)text被截取的字符 start_num从左起第几位开始截取(用数字表达)num_chars从左起向右截取的长度是多少(用数字表达)此例子是提取身份证号码中的出生年月日。在B2单元格输入公式=MID...

excel表中判断几个单元格有无某数值,并返回一个数值
没有看到你的截图,假如判断G1到L1,如果有1就返回1,如果没有1就显示空白 A1输入 =if(countif(G1:L1, 1),1,"")或者这个固定值在某个单元格中(如在B1中)=if(countif(G1:L1,B1),B1,"")

茂港区19512519151: c++如何返回一个数组 -
进贞硫酸: 可以使用静态变量进行返回、用指针传递、通过返回传入数组的指针三种方法实现; 代码分别如下: // 方法1,用静态变量进行返回 char *SubFunction(void) { static char szText[5] = "adfa"; // 用静态空间 //对p进行赋值操作 return szText; } void ...

茂港区19512519151: C++中如何使函数返回数组 -
进贞硫酸: 在C++中,数组不是一种类型,因此不能被直接返回.一般有两种方法来返回一个数组. 1. 返回一个指向数组的指针 #include<iostream> using namespace std;int* Array(){ int *a;a=new int [10]; for(int i=0;i<10;i++){a[i]=i+1;cout<<a[i]<<" "; } cout...

茂港区19512519151: C++怎么在函数中返回数组 -
进贞硫酸: 可以像这样:int *rv(int n) {int *a=new int[n];for (int i=0;i<n;i++) a[i]=i;return a; }

茂港区19512519151: 在C中如何使函数返回数组 -
进贞硫酸: Java语言的函数可以轻易的返回一个数组,而C/C++却不能直接返回一个数组.这是由于在C/C++中,数组不是一种类型,因此不能被直接返回. 在C/C++中,一般有两种方法来返回一个数组. 第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组 例子如下:#include #include int (*retArray())[10]{int (*a)[10];int i=0;/*动态开辟空间*/ a=calloc(10,sizeof(int));/*赋值*/for(i=0;i

茂港区19512519151: C++ 如何返回数组 -
进贞硫酸: C++可以是array数组对象,那么可以返回数组也可以返回指针, 既返回数组的首地址

茂港区19512519151: C++中如果使用一个函数返回数组,怎样返回? -
进贞硫酸: 可以返回指针#include<stdio.h>#include<malloc.h>#include<string.h> char* test() { char *arr = (char*)malloc(10); strcpy(arr,"adf"); return arr; } int main() { char *p =test(); printf("%s\n",p); free(p); }

茂港区19512519151: C++,函数如何返回一个string数组? 有例子么? -
进贞硫酸: C++ 有所谓的 vector ,创建一个 vector,然后把内容放到这个vector,然后 return 即可.

茂港区19512519151: c语言中如何使返回值为数组 -
进贞硫酸: 1、注意C/C++不能直接返回一个数组.这是由于在C/C++中,数组不是一种类型,因此不能被直接返回. 2、在C/C++中,一般有两种方法来返回一个数组. 第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数...

茂港区19512519151: c++ 函数调用怎么返回数组? -
进贞硫酸: #include <stdio.h> int fun(char a[],char b[]) {int i=0,j=0; while(a[i]!='\0') i++;//判断a字符串的长度 while((b[j])!='\0') { a[i]=b[j]; i++; j++; }//把b字符串存入a的后面 a[++i]='\0'; //字符串结束标志 return i; //返回拼接后字符串长度 } void main() { char a[...

茂港区19512519151: C++在函数中如何能return一个数组型的字符串 -
进贞硫酸: 1. 按照你的写法, buff是在read()的函数栈中分配的, 当read()函数调用完毕后, 栈上的内容会被释放, 所以在main()调用read()后, 进行printf()获得的很有可能是无效的数据. 这种方法不可行.2. 尽量通过扩展参数的方式把buff传...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网