--- 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言語によるアルゴリズムとデータ構造

新版 C言語によるアルゴリズムとデータ構造

配列の要素数

 配列の要素数は

>|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 をつけて宣言しておけば、配列の要素に対して値を書き込めなくなります。

Amazon CAPTCHA

ということらしい。仕様だよ、ということらしい。

関数形式マクロ

 C言語編 第39章 マクロを参照する。