Cprogramming-c-passing-pointers-to-functions

提供:Dev Guides
移動先:案内検索

Cの関数にポインターを渡す

Cプログラミングでは、ポインターを関数に渡すことができます。 そのためには、単に関数パラメーターをポインター型として宣言します。

以下は、関数に符号なしの長いポインタを渡し、呼び出し元の関数に反映される関数内の値を変更する簡単な例です-

#include <stdio.h>
#include <time.h>

void getSeconds(unsigned long *par);

int main () {

   unsigned long sec;
   getSeconds( &sec );

  /*print the actual value*/
   printf("Number of seconds: %ld\n", sec );

   return 0;
}

void getSeconds(unsigned long *par) {
  /*get the current number of seconds*/
   *par = time( NULL );
   return;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Number of seconds :1294450468

ポインタを受け入れることができる関数は、次の例に示すように配列も受け入れることができます-

#include <stdio.h>

/*function declaration*/
double getAverage(int *arr, int size);

int main () {

  /*an int array with 5 elements*/
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

  /*pass pointer to the array as an argument*/
   avg = getAverage( balance, 5 ) ;

  /*output the returned value */
   printf("Average value is: %f\n", avg );
   return 0;
}

double getAverage(int *arr, int size) {

   int  i, sum = 0;
   double avg;

   for (i = 0; i < size; ++i) {
      sum += arr[i];
   }

   avg = (double)sum/size;
   return avg;
}

上記のコードを一緒にコンパイルして実行すると、次の結果が生成されます-

Average value is: 214.40000