深入探讨函数返回值

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

函数返回值作为函数的参数

如果函数返回值作为另一个函数的参数,那么这个返回值必须与另一个函数的参数的类型一致。