連載
【問題9】配列とポインタの深い関係:完全マスター! 組み込みC言語プログラミング(10)(4/4 ページ)
C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はC言語の難所の1つ、ポインタに関する問題を解説していきます。
Cのコーディングは凝縮される
lifo4.cとlifo3.cは全く同じプログラムです。前回と同様に、インクリメント演算子(++)とデクリメント演算子(--)を、文の中に入れ込んでしまいました。
#include <stdio.h> int main(void) { int n, data[100], *p; printf("数を入力してください->"); scanf("%d", &n); p = data; while (n >= 0) { *p++ = n; printf("数を入力してください->"); scanf("%d", &n); } while (p > data) printf("%d\n", *--p); }
「lifo4.c」
lifo4.cで、11行目の
*p++ = n;
は、++がpの後ろに書かれているので、++はポストインクリメント(後置増分)です。従って、先にpがポイントするint領域にnを代入し、その後pを次のint領域に進めます。
対して、15行目の
*--p
は、どうでしょうか。
ここでは、まず--がpの前に書かれているので、--はプリデクリメント(前置減分)です。従って、先にpを直前のint領域に移し、その後pがポイントするint領域の内容を返します。
実は、C言語では、lifo4.cスタイルで書かれているプログラムをよく見かけます。
問題10
それでは、次回の宿題です。
問題10:
文字列を入力し、英小文字があれば英大文字に換えて表示するプログラムを書いてみましょう。
⇒解答と解説は次回
Copyright © ITmedia, Inc. All Rights Reserved.