連載
» 2014年09月05日 11時00分 UPDATE

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

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はC言語の難所の1つ、ポインタに関する問題を解説していきます。

[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
photo

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。

 毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。では早速、前回の問題を振り返ってみましょう。


問題9 「後入れ後出し(LIFO)で入力された数を表示するプログラムを、ポインタを使って書く」

前回の宿題(問題9):

負数が入力されるまで繰返し整数を入力し、負数が入力されたならばLIFO(後入れ先出し)の順番で、入力された整数を表示するプログラムを、添字ではなくポインタを使って書いて下さい。


 おかげさまでこの連載も10回目となりました。今回はC言語の難所の1つ、ポインタに関する問題です。

 問題9は、前回の配列に関する問題「LIFO(後入れ先出し)の順番で、入力された整数を逆順に表示する」を、ポインタを使ってプログラムを作る問題でした(完全マスター! 組み込みC言語プログラミング(9):【問題8】繰返しと配列は相性がいい)。実は、C言語の配列とポインタは関係が深く、具体的には、

  1. 配列とポインタはともに派生型である。
  2. 配列の名前はポインタとして扱われる。
  3. ポインタに対する演算は、配列の添字と同等に作用される。

 があります。

 それでは解答を発表しましょう。

#include <stdio.h>
 
int main(void)
{
     int n, data[100], *p;
     printf("数を入力してください->");
     scanf("%d", &n);
     p = data;
     while (n >= 0) {
         *p = n;
          p++;
         printf("数を入力してください->");
         scanf("%d", &n);
     }
     while (p > data) {
         p--;
     printf("%d\n", *p);
     }
}
問題9の解答「lifo3.c」

lifo3.cを実行すると、次のような結果になります。

photo
       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.