C 从函数返回指针

在上一章中,我们已经了解了 C 语言中如何从函数返回数组,类似地,C 允许您从函数返回指针。为了做到这点,您必须声明一个返回指针的函数,如下所示:

1 int * myFunction()
2 {
3 .
4 .
5 .
6 }

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

现在,让我们来看下面的函数,它会生成 10 个随机数,并使用表示指针的数组名(即第一个数组元素的地址)来返回它们,具体如下:

 1 #include <stdio.h>
 2 #include <time.h>
 3 #include <stdlib.h> 
 4 
 5 /* 要生成和返回随机数的函数 */
 6 int * getRandom( )
 7 {
 8    static int  r[10];
 9    int i;
10  
11    /* 设置种子 */
12    srand( (unsigned)time( NULL ) );
13    for ( i = 0; i < 10; ++i)
14    {
15       r[i] = rand();
16       printf("%d\n", r[i] );
17    }
18  
19    return r;
20 }
21  
22 /* 要调用上面定义函数的主函数 */
23 int main ()
24 {
25    /* 一个指向整数的指针 */
26    int *p;
27    int i;
28 
29    p = getRandom();
30    for ( i = 0; i < 10; i++ )
31    {
32        printf("*(p + [%d]) : %d\n", i, *(p + i) );
33    }
34  
35    return 0;
36 }

当上面的代码被编译和执行时,它会产生下列结果:

 1 1523198053
 2 1187214107
 3 1108300978
 4 430494959
 5 1421301276
 6 930971084
 7 123250484
 8 106932140
 9 1604461820
10 149169022
11 *(p + [0]) : 1523198053
12 *(p + [1]) : 1187214107
13 *(p + [2]) : 1108300978
14 *(p + [3]) : 430494959
15 *(p + [4]) : 1421301276
16 *(p + [5]) : 930971084
17 *(p + [6]) : 123250484
18 *(p + [7]) : 106932140
19 *(p + [8]) : 1604461820
20 *(p + [9]) : 149169022

 

posted @ 2016-05-06 18:10  新生代黑马  阅读(3224)  评论(0编辑  收藏  举报