--- title: 『新版 C言語によるアルゴリズムとデータ構造』・第二章 author: kazu634 date: 2008-05-04 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3979;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - C - Programming ---
続き。
配列の要素数は
>|c>
sizeof(a) / sizeof(a[0]);
||<
で計算できます。例はこんな感じ。
#include <stdio.h> int main(void); int main(void) { int i; int a[5] = {1, 2, 3, 4, 5}; /* 次で要素数を計算しているよ! */ int num_a = sizeof(a) / sizeof(a[]); printf ("配列 a の要素数は %d です。\n", num_a); for (i = ;i <= 5;i++) printf ("a[%d] = %d\n", i, a[i]); return(); }
結構、面倒くさい…というのが正直なところ。
配列を走査して最大値を求めます。
#include <stdio.h> int main(void); int maxof(const int a[], int num_a); int maxof(const int a[], int num_a) { int i; int max = a[]; for (i = 1;i < num_a;i++) if (max < a[i]) max = a[i]; return(max); } int main(void) { int i; int x[7]; int nx = sizeof(x) / sizeof(x[]); printf ("%d 個の整数を入力してください。\n", nx); for (i = ;i < nx;i++) { printf ("x[%d]: ", i); scanf("%d", &x[i]); } printf ("最大値は %d です。\n", maxof(x, nx)); return(); }
ここで注意なのが、
C言語では、関数間で配列を<先頭要素へのポインタ>という形で受け渡します。このため、呼び出される側の関数で要素数を調べることはできませんので、配列とは別に要素数を受け取る必要があります。
また、受け取った側の関数で、引数に const をつけて宣言しておけば、配列の要素に対して値を書き込めなくなります。
ということらしい。仕様だよ、ということらしい。
C言語編 第39章 マクロを参照する。