Thinkers'Studio
JavaとC言語の自習ツール
配列とポインタのプログラムクイズ(1)

ポインタは配列の操作でよく使われます

 その理由はこうです。
  • ポインタの値をひとつ進めると、ポインタが指すデータ型ひとつの大きさを足したアドレスとなる
  • 配列は同じ型のデータが並んだものだ
    配列の一要素を指したポインタを進めたり戻したりすれば、簡単に任意の位置の要素を指すことができる
 下は、int型の配列 score の要素をポインタを使って参照し、先頭からプリントするプログラムです。
#include <stdio.h>
main()
{
    int i, *p;
    int score[] = { 10, 20, 30, 40, 50 };

    p = score;
    for( i = 0; i < 5; i++ )
        printf( "%d ", *p++ );
    putchar( '\n' );
}
 このプログラムを実行すると、次のように表示されます。
 10 20 30 40 50
 p = score でポインタ p が score 配列の先頭を指すようにした後、要素数分だけプリントする処理を繰り返しています。
 その他、ポインタに関するコードを下に整理します。
int *p p は int型データの記憶場所(アドレス)を指すポインタです
p = score 配列名だけ書くとその先頭要素のアドレスを表わします。それを代入しています
*pポインタ p が指す値です
*p++ ポインタ p が指す値を参照した後、p の値をひとつ進めて次の要素を指すようにします

(今回のクイズです)
 上のプログラムの printf文を次のように書き換えて実行すると、どのような結果に変わるでしょうか?
    printf( "%d ", (*p)++ );
 その理由も説明してください。 (答えは、次回のC言語の Tips で ・・・)

[ 関連記事 ] 用語集:ポインタ, Tips:ポインタの間違い探し, 配列とポインタのクイズ(2), 同(3), NULLポインタ
[ ご案内 ] ポインタの要点を学習できるコース:要点講座 [配列とポインタ編]

前回のクイズの答え: (前回の問題を見る
Name1 : Mickey
Name1 : Mickey and Minnie Mouse
name1[6] = '\0'; としたので、"Mouse" の前に文字列終端が設定され、1行目の結果は "Mickey"となりました。
その後 " and " を連結し、さらに name2 "Minnie Mouse" を連結したので、2行目の実行結果が表示されました。