C ポインタを関数に渡す
が残ります。理解できるでしょう。
次の例では、unsigned long 型のポインタを関数に渡し、関数内でこの値を変更します。
( ) は write 操作を呼び出します。以下同様です。実際には、ポインタ action をマウスや他の GUI オブジェクトに関連付けて、対応する目的を達成できます。
#include <stdio.h>
#include <time.h>
void getSeconds(unsigned long *par);
int main ()
{
unsigned long sec;
getSeconds( &sec );
/* 実際の値を出力 */
printf("Number of seconds: %ld\n", sec );
return 0;
}
void getSeconds(unsigned long *par)
{
/* 現在の秒数を取得 */
*par = time( NULL );
return;
}
#include <time.h>
void getSeconds(unsigned long *par);
int main ()
{
unsigned long sec;
getSeconds( &sec );
/* 実際の値を出力 */
printf("Number of seconds: %ld\n", sec );
return 0;
}
void getSeconds(unsigned long *par)
{
/* 現在の秒数を取得 */
*par = time( NULL );
return;
}
上記のコードがコンパイルされて実行されると、次の結果が生成されます。
Number of seconds :1294450468
ポインタを引数として受け取れる関数は、配列も引数として受け取ることができます。次のようになります。
例
#include <stdio.h>
/* 関数宣言 */
double getAverage(int *arr, int size);
int main ()
{
/* 5 つの要素を持つ整数配列 */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* 配列を指すポインタを引数として渡す */
avg = getAverage( balance, 5 ) ;
/* 戻り値を出力 */
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;
}
/* 関数宣言 */
double getAverage(int *arr, int size);
int main ()
{
/* 5 つの要素を持つ整数配列 */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* 配列を指すポインタを引数として渡す */
avg = getAverage( balance, 5 ) ;
/* 戻り値を出力 */
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その他の拡張
C ポインタ