深入探讨函数返回值
C++函数的返回值类型可以是除数组和函数以外的任何类型,非void类型的函数必须向调用者返回一个值,数组只能返回地址。当返回值是指针或引用对象时,需要特别注意:函数返回所指的对象必须继续存在,因此不能将函数内部的局部对象作为函数的返回值。
返回引用的函数
函数可以返回一个引用,这样的目的是为了将该函数用在赋值运算符的左边,因为其他情况下,一个函数是不能直接用在赋值运算符左边的。
返回引用的函数原型的声明方式为:
数据类型 &函数名(参数列表);
#include <iostream>
using namespace std;
int a[] = {2, 4, 6, 8, 10, 12};
int &index(int i);
int main()
{
index(3) = 16;
cout << index(3) << endl;
for (int i = 0; i < 6; i++)
{
cout<<"第"<<i+1<<"个元素:"<<a[i]<<endl;
}
return 0;
}
int &index(int i)
{
return a[i];
}
16
第1个元素:2
第2个元素:4
第3个元素:6
第4个元素:16
第5个元素:10
第6个元素:12
返回指针的函数
指针函数:返回值是存储某种类型数据的内存地址的函数。
返回指针的函数原型的声明方式为:
数据类型 *函数名(参数列表);
#include <iostream>
using namespace std;
float *input(int &);
int main()
{
int num;
float *data = input(num);
if (data)
{
for (int i = 0; i < num; i++)
{
cout << data[i] << " ";
}
delete data;
}
}
float *input(int &n)
{
cout << "input number:";
cin >> n;
if (n <= 0)
return NULL;
float *buf = new float[n];
if (buf == 0)
return NULL;
for (int i = 0; i < n; i++)
cin >> buf[i];
return buf;
}
input number:3
20.1
30.2
4.6
20.1 30.2 4.6
返回对象的函数
返回对象的函数原型的声明方式为:
数据类型函数名(参数列表)
#include <iostream>
#include <string>
using namespace std;
string input(const int);
int main()
{
int n;
cout << "input n=";
cin >> n;
string str = input(n);
cout << str << endl;
return 0;
}
string input(const int n)
{
string s1, s2;
for (int i = 0; i < n; i++)
{
cin >> s1;
s2 = s2 + s1 + " ";
}
return s2;
}
input n=3
zhang
san
feng
zhang san feng
函数返回值作为函数的参数
如果函数返回值作为另一个函数的参数,那么这个返回值必须与另一个函数的参数的类型一致。