8.5 KiB
8.5 KiB
title | author | date | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|
『新版 C言語によるアルゴリズムとデータ構造』・第二章 | kazu634 | 2008-05-04 |
|
|
続き。
- 作者: 柴田望洋,辻亮介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/08/27
- メディア: 大型本
- 購入: 4人 クリック: 14回
- この商品を含むブログ (23件) を見る
配列の要素数
配列の要素数は
>|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章 マクロを参照する。