2000.09.22 KPC 情報技術科 関谷
5-2のテキストにあるように、1次元の配列は、配列とポインタが全く同様に使えます。ただし、2次元以上になると、2次元目以上の添え字を仮引数に明示しなければなりません。(例えば、int is[][4])。添え字の計算で、それらが必要になるためです。
なお、文字列の場合は、少し、違うようです。次節「5-3 名簿のデータ操作」では、文字列へのポインタ配列を使った例があるので、そこで、文字列へのポインタ配列について学習します。
優先順序 結合規則 演算子名 形式
レベル1 → 後置増分 op1++ 後置減分 op1--
レベル2 ← 前置き増分++op1 前置減分 --op1 アドレス &op1 間接参照 *op1 正符号 +op1 負符号 -op1 補数 ~op1 否定 !op1
プログラム5−1は、文字列の配列名を実引数にして、関数の仮引数は文字列へのポインタ変数にしている。プログラム5-2は、5-1のメインでの関数呼出し方法を関数の仮引数の型に合わせて、文字へのポインタを使っている。
標準入力からの文字の読み込み関数getstr()は、EOFでのwhileループから抜けた後の'\0'の代入番地が違っている。(後の例2で使って間違いが分かった。)訂正のこと。
*--s = '\0';
関数のプロトタイプ宣言は、どちらも同じで、次のようになる。
void getstr(char *s);
void slice(char *s, char *t, int n, int m);
プログラムの入力では、C言語のプログラムの様式に合わせて作成のこと。なお、考察を先頭部分に書くのが良い。
プログラム5-3は、整数のポインタにアドレスを代入して、それを実引数にしている。5-4は、実引数にアドレス演算子を使っている。
関数のプロトタイプ宣言は、どちらも同じで、次のようになる。
void swp(int *pi, int *pj, int *pk);
演算子の優先順序の関係から、18行目では、(*pl)++;となる。
標準入力からの文字の読み込み関数getstr()(プログラム5−1)は、EOFでのwhileループから抜けた後の'\0'の代入番地が違っている。訂正のこと。
*--s = '\0';
関数のプロトタイプ宣言は、次のようになる。
void getstr(char *s);
void lgstr(char *ps, int *pl);
関数getstr()の定義は、前のプログラムからコピーのこと。
これまで、文字列の処理をいろいろと行ってきたが、それらをポインタで扱う問題です。文字列(char型の配列)は、ポインタ変数で、便利に扱えます。
この問題では、*ps,*++psの2つの文字の出力を同じ、printf文で行うと、違いが見えない。2つのprinntf文に分ける必要がある。
レポートは、実習した全部のプログラムを順番に貼り付けて、レポート用のテキストファイルを作成のこと。
・フォルダ:w:\アプリケーション演習¥C言語ptr_array9.22 ・ファイル名:nn氏名ap15.txt
前半は、Word/Excelの学習でしたが、後半はC言語の学習をしています。従って、試験と評価は両方を対象にします。 後半のC言語プログラミングは、論理の問題だから、向き不向きがあります。しかし、入学試験を合格してきた皆さんなら、ある程度やれば、できるのです。それでも、新しい言語だから、まじめに学習しないで、新しい言語の習得ができる訳がありません。これが嫌な人は、早く、方向転換をした方が良いでしょう。
小生の授業の進め方についての評価も最後にお願いするつもりです。お互いに真剣にやりましょう。