C++ 函数返回数组
C++ 不允许函数返回一个完整的数组,比如下面这种方式是错误的
int[] myFunction(){}
但是,可以通过指定不带索引的数组名来返回一个指向数组的指针,例如这样是允许的
int * myFunction(){}
另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量
下面这样是不被允许的
int * myFunction(){ int arr[] myarr; return myarr; // 错误,不能返回局部变量 }
下面这样是被允许的
int * myFunction(){ static int arr[] myarr; return myarr; // 可以,因为是静态局部变量 }
现在,我们写一个函数返回一个数组,这个数组包含随机生成的 5 个数字
/** * file: main.cpp * author: 简单教程(www.twle.cn) * * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ #include <iostream> #include <cstdlib> #include <ctime> const int LEN = 5; // 要生成和返回随机数的函数 int * random_num( ) { static int r[LEN]; // 设置种子 srand( (unsigned)time( NULL ) ); for (int i = 0; i < LEN; ++i) { r[i] = rand(); std::cout << r[i] << std::endl; } return r; } int main () { // 一个指向整数的指针 int *p; p = random_num(); for ( int i = 0; i < LEN; i++ ) { std::cout << "*(p + " << i << ") : "; std::cout << *(p + i) << std::endl; } return 0; }
编译和运行以上范例,输出结果如下
1985819170 1619432163 588621463 1651250559 636974932 *(p + 0) : 1985819170 *(p + 1) : 1619432163 *(p + 2) : 588621463 *(p + 3) : 1651250559 *(p + 4) : 636974932