之前用函數都只用到return 一個變數如int char ..

這次有需要這函數回傳一個矩陣回來...

函數回傳矩陣的方法如網址

http://www.tutorialspoint.com/cprogramming/c_return_arrays_from_function.htm

( 如果要從函數返回單維數組,則必須聲明一個返回指針的函數,如下例所示 - )

C programming does not allow to return an entire array as an argument to a function. However, you can return a pointer to an array by specifying the array's name without an index.(C語言不允許回傳矩陣,但她可以回傳矩陣指標)

If you want to return a single-dimension array from a function, you would have to declare a function returning a pointer as in the following example −

 

int * myFunction() {
   .
   .
   .
}

Second point to remember is that C does not advocate to return the address of a local variable to outside of the function, so you would have to define the local variable as static variable.

(要注意的是 C不提倡把局部變數的位址給到外部函數,因此需要把局部變數的定義為靜態(static)變數)

Now, consider the following function which will generate 10 random numbers and return them using an array and call this function as follows −

(以下範例 可以產生十個隨機數字,並且return 使用)

#include <stdio.h>

/* function to generate and return random numbers */
int * getRandom( ) {

   static int  r[10];
   int i;

   /* set the seed */
   srand( (unsigned)time( NULL ) );
  
   for ( i = 0; i < 10; ++i) {
      r[i] = rand();
      printf( "r[%d] = %d\n", i, r[i]);
   }

   return r;
}

/* main function to call above defined function */
int main () {

   /* a pointer to an int */
   int *p;
   int i;

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

   return 0;
}

When the above code is compiled together and executed, it produces the following result −

(以下為執行結果)

r[0] = 313959809
r[1] = 1759055877
r[2] = 1113101911
r[3] = 2133832223
r[4] = 2073354073
r[5] = 167288147
r[6] = 1827471542
r[7] = 834791014
r[8] = 1901409888
r[9] = 1990469526
*(p + 0) : 313959809
*(p + 1) : 1759055877
*(p + 2) : 1113101911
*(p + 3) : 2133832223
*(p + 4) : 2073354073
*(p + 5) : 167288147
*(p + 6) : 1827471542
*(p + 7) : 834791014
*(p + 8) : 1901409888
*(p + 9) : 1990469526
arrow
arrow
    文章標籤
    function return array
    全站熱搜

    JL8051 發表在 痞客邦 留言(1) 人氣()