サイトマップ / C言語講座出入り口総目次目次:ポインタ>データの書き換え

青い直線

データの書き換え

青い直線

[ポインタの型と初期化]←このソース→[ポインタの指す位置]

/* 前回は変数のアドレスをポインタに入れて、ポインタの指す中身を表示しました。sをポインタとすると、下記に示すようにポインタの指す位置を1つ先に移動することもできました。

    s++;

ポインタを通したデータの書き換え

今回はポインタの指す中身を増加させてみます。

*sはポインタの指す中身のことです。これにインクリメント演算子を組み合わせれば、ポインタの指す中身の値を1増加させることができます。その際カッコが必要になります。下記のコードでポインタの指す中身を1増加させます。

    (*s)++;

ソースプログラムの説明

今日のソースプログラムでは、int型の変数xとint型のポインタpxを宣言して、pxにxのアドレスを代入し、上記の操作を繰り返し行い、xの値を0から9まで変化させます。この際、xの値を直接変化させていないことに注目して下さい。また、char型の変数cとchar型のポインタpcを宣言して、pcにcのアドレスを代入し、上記の操作を繰り返し行い、cの値を'a'から'z'まで変化させます。この際、cの値を直接変化させていないことに注目して下さい。

ポインタの名前には、”p”という文字を入れておくと、その変数がポインタであることを明示できるので良いと思います。また、将来、ファイルを扱う際に、ファイルポインタを通してデータを読み書きする事になります。この時には、ファイルポインタであることを明示する目的で、”fp”と名前を付けることが多くあります。 */

/* ここからソースプログラム */

#include <stdio.h>

void main(void);

void main(void)
{
    int i;

    int x = 0;        /* 初期値 0 */
    int *px;          /* x を指すポインタ */

    char c = 'a';     /* 初期値 'a' */
    char *pc;         /* c を指すポインタ */

    px = &x;          /* x のアドレスを px に代入 */
    pc = &c;          /* c のアドレスを pc に代入 */

    for (i = 0; i < 10; i++) {	 
        printf("%d", x);        /* x の値を表示 */
        (*px)++;                /* px の指す中身をインクリメント */
    }
    printf("\n");               /* 1 行改行 */

    for (i = 0; i < 26; i++) {
        printf("%c", c);        /* c の値を表示 */
        (*pc)++;                /* pc の指す中身をインクリメント */
     }
     printf("\n");              /* 1 行改行 */
}

/* ここまでソースプログラム */

/* printf( )は下記のようにしても同じ結果となります。

    printf("%c", c);
    printf("%c", *pc);

cの値を表示しても、pcの指す中身を表示させても、同じものが表示されます。

for ( )ループは下記の簡潔な表現に書き換えられます。

    for (i = 0; i < 10; i++) 
        printf("%d", (*px)++);

この場合、pxの指す中身を表示してから、pxの指す中身をインクリメントせよということです。

++(*px)では、pxの指す中身をインクリメントしてから、pxの指す中身を表示せよとなり、異なる結果になります。 */

[ポインタの型と初期化]←このソース→[ポインタの指す位置]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:ポインタ>データの書き換え