C 语言 从函数返回数组

返回上一级

C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。 其实就是通过返回一个指向数组第一个元素的指针来返回数组。

我们将在下一章中讲解有关指针的知识,您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容。

如果想要从函数返回一个一维数组,就必须声明一个返回指针的函数,如下:

int * myFunction()
{
   ....
}

注意

C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量

现在,让我们来看下面的范例,它会生成 10 个随机数,并使用数组来返回它们

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* 
 * 要生成和返回随机数的函数 
 */
int * getRandom( )
{
  static int  r[5];
  int i;


  srand( (unsigned)time( NULL ) );
  for ( i = 0; i < 5; ++i)
  {
     r[i] = rand();
     printf( "r[%d] = %d\n", i, r[i]);

  }

  return r;
}

int main ()
{

   int *p;
   int i;

   p = getRandom( );

   printf("\n");

   for ( i = 0; i < 5; i++ )
   {
       printf( "*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

编译和运行上面的范例,输出结果如下

$ gcc main.c && a.out
r[0] = 1586542705
r[1] = 1866281783
r[2] = 451778799
r[3] = 1691582648
r[4] = 2041045950

*(p + 0) : 1586542705
*(p + 1) : 1866281783
*(p + 2) : 451778799
*(p + 3) : 1691582648
*(p + 4) : 2041045950

从范例中我们可以看到,函数返回数组,需要经过以下几个步骤:

  1. 被调用函数内部必须定义一个 static 的静态数组

  2. 调用函数的语句块必须声明一个接收相同数据类型的指针

  3. 数组的长度要硬编码在程序内。

就是第 3 条,导致代码的复用性太低了,所以,我们不推荐函数返回数组。

返回上一级

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.