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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM