メディア

【問題9】配列とポインタの深い関係完全マスター! 組み込みC言語プログラミング(10)(4/4 ページ)

» 2014年09月05日 11時00分 公開
[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
前のページへ 1|2|3|4       

Cのコーディングは凝縮される

 lifo4.cとlifo3.cは全く同じプログラムです。前回と同様に、インクリメント演算子(++)とデクリメント演算子(--)を、文の中に入れ込んでしまいました。


  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int n, data[100], *p;
  5. printf("数を入力してください->");
  6. scanf("%d", &n);
  7. p = data;
  8. while (n >= 0) {
  9. *p++ = n;
  10. printf("数を入力してください->");
  11. scanf("%d", &n);
  12. }
  13. while (p > data) printf("%d\n", *--p);
  14. }
「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:

文字列を入力し、英小文字があれば英大文字に換えて表示するプログラムを書いてみましょう。

⇒解答と解説は次回


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.