next up previous contents
Next: 實機練習題 Up: 指標 Previous: 傳送陣列位址到函式   Contents   DYWANG_HOME

從函式回傳陣列指標

  1. C 語言無法讓函式回傳整個陣列值,但可以藉由回傳陣列的位址指標,達到回傳陣列的目的,函式宣告方式如下:
    int * myFunction() {
    ....
    }
    
  2. 陣列位址指標:也就是指到陣列第一個元素位址的指標。如下例子,age[10] 是一個 10 元素的整數陣列,arg 就表示這個陣列第一個元素儲存的位址,也就是 &age[0],可以宣告一個 pointer 變數 p 指到這個位址。
    int *p;
    int age[10];
    
    p = age;
    
  3. 範例:getRandom 函式產生 6 個元素的隨機數,儲存在陣列 r,並回傳陣列 r 的位址。
    [dywang@dyw219 zzz]$ vim pointer10.c
    [dywang@dyw219 zzz]$ cat pointer10.c
    #include <stdio.h>
    
    int * getRandom() {
    	static int r[6];
    	int i;
    
    	srand( (unsigned)time(NULL) );
    	for ( i=0; i<6; ++i ) {
    		r[i] = rand();
    		printf( "r[%d] = %d\n", i, r[i]);
    	}
    	return r;
    }
    
    main () {
    	int *p;
    	int i;
    
    	p = getRandom();
    	for ( i=0; i<6; i++ )	{
    		 printf( "*(p+%d) : %d\n", i, *(p+i) );
    	}
    }
    
  4. 編譯
    [dywang@dyw219 zzz]$ gcc -o pointer10 pointer10.c
    
  5. 執行結果:在 getRandom 內外輸出的陣列元素值完全一樣。
    [dywang@dyw219 zzz]$ ./pointer10 
    r[0] = 126116717
    r[1] = 1369586395
    r[2] = 794304807
    r[3] = 586010293
    r[4] = 240585651
    r[5] = 20839561
    *(p+0) : 126116717
    *(p+1) : 1369586395
    *(p+2) : 794304807
    *(p+3) : 586010293
    *(p+4) : 240585651
    *(p+5) : 20839561
    



De-Yu Wang 2021-01-11