想要输出数组,应该return什么

//FunctionTemplate.h
#ifndef FUNCTIONTEMPLATE
#define FUNCTIONTEMPLATE

template<typename Type>int Sort(Type b[],int m)
{ int i,temp,n=0;
  for(i=0;i<n;i++)
	{  if(b[i]>b[i+1])
           {  temp=b[i];
              b[i]=b[i+1];
			  b[i+1]=temp;}
  }
  
	 
  for( i=0;i<n;i++)
  cout<<b[i]<<" ";
 return b[i];}
  
#endif     


//10.1.cpp
#include "stdafx.h"
#include"FunctionTemplate.h"
#include <iostream>
#include<string>
using namespace std;

int main()
{ int n,i;int a[100000];
	cout<<"请输入数组的元素个数:"<<endl;
cin>>n;
cout<<"请输入数组的元素:"<<endl;
for(i=0;i<n;i++){ cin>>a[i];}
cout<<"对此数组进行升序排列:"<<endl;
cout<<Sort(a,n)<<endl;
	return 0;
}

 

return语句是函数的返回值,且只能执行一次程序就终止了,想要返回数组,首先需要确保你的函数返回值类型数组存储的数据类型的指针类型一致,你此处使用的是模板函数,数组存储的数据类型是Type,因此函数的返回值应该是Type*,具体见代码修改。

//代码修改
//将代码整合为一个cpp文件,也可以分文件写。
#include <iostream>
#include<string>
using namespace std;

//修改返回值为Type*类型为返回数组的地址 
template<typename Type>
Type* Sort(Type b[],int m)
{ 
//重新修改排序算法,采用选择排序 
int i,index;
for(i=0;i<m-1;i++){
	index = i;
	int j;
	for(j=i+1;j<m;j++){
		if(b[i]>b[j]){
			index = j;
		}
	}
	if(index!=i){
		int temp=b[i];
		b[i] = b[index];
		b[index] = temp;
	}
}
//返回数组名即可,即数组的地址 
return b; 
}
 
int main()


{ int n,i;int a[100000];


	cout<<"请输入数组的元素个数:"<<endl;


cin>>n;


cout<<"请输入数组的元素:"<<endl;


for(i=0;i<n;i++){ cin>>a[i];}


cout<<"对此数组进行升序排列:"<<endl;

//修改Sort模板函数的调用
//返回为指针类型保存到arr中
//循环遍历输出值 
int *arr = Sort<int>(a,n);
for(int i=0;i<n;i++){
	cout<<arr[i]<<" ";
}
	return 0;


}

 

你的cout不是已经把数组输出了吗?

直接返回数组名就可以了

先说结论:直接返回数组是不可能做到的,C++没有这样的语法。

尽管不可能返回数组,你可以返回跟数组关联的指针,或者用类封装后返回一个类对象。(返回数组名本质也是返回指针。许多教材和教职人员不去详细辨析二者的区别,但二者无疑是完全不同的东西,将二者混为一谈对新手是不利的。)

==========================================================

解决方案:

返回指针:数组名指示的标识符会被隐式转换为指针,因此return array_name;就足够了。

STL的array类:这个是标准的STL数组容器,可以直接return。需要基础的类知识。如果采用这种方案,最好把函数原型也改成std::array作为参数的形式。

封装类:这个相对复杂,跟class有关,不了解数组和容器本质的话非常不建议直接上手类。

==========================================================

数组和指针很多行为相似的原因是二者之间存在隐式转换和汇编层的相同之处,这种自动转换掩盖了很多行为差异,但不代表二者可以混为一谈。

数组和指针最主要的区别是sizeof操作的结果不同。语法意义上的数组(不含malloc获得的伪数组,也不含vector这种被新手称为数组但实际上跟数组毫无关系的东西,也不包含STL的array数组容器,仅指标准C语法规定的数组)sizeof返回的是整个数组的字节数,而指针sizeof返回值只与应用程序当前环境下的字长有关,例如32位下就是4,64位下就是8。注意,这里的“32位”“64位”指的是应用程序本身的执行环境字长,而不是硬件字长,例如64位机器下的32位程序,sizeof返回的就是4而不是8。

另外,数组和指针在模板推导过程中的行为也是完全不同的。这点在此不赘述。