在上一章中,我們已經了解了 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