サイトマップ / C言語講座出入り口総目次目次:ポインタ>ポインタと配列

青い直線

ポインタと配列

青い直線

[部分文字列の検索]←このソース→[ポインタの配列(1)]

/* ポインタと配列

今日は、ポインタと配列について学びます。文字列を下記のように宣言するとします。

    char lib[6] = "scanf";

各要素に配列の添字でアクセスするには、このようにします。

printf("%c", lib[0]);    // "s" が表示される
printf("%c", lib[1]);    // "c" が表示される
printf("%c", lib[2]);    // "n" が表示される

配列の名前はその配列の先頭のアドレスを指します。しかし、ポインタと違って演算はできません

下記では、char型のポインタpを宣言して、配列lib[ ]の先頭アドレスをpに渡しています。次いで、pの指す中身が'\0'でなければ中身を表示して、pの指すアドレスをインクリメントしています。

    char *p;
    p = lib;

    while (*p != '\0')
        printf("%c", *p++);

char lib[6] = "scanf"は1次元の配列です。複数の文字列を配列を使って宣言すると、配列は2次元になります。下に示すのはその例です。

    char kw[3][7] = {"double", "extern", "switch"};

添字を使って、配列の要素にアクセスするには、下記のようにします。

    printf("%c", kw[0][0]); // "d" が表示される
    printf("%c", kw[0][1]); // "o" が表示される
    printf("%c", kw[0][2]); // "u" が表示される
    printf("%c", kw[0][3]); // "b" が表示される
    printf("%c", kw[0][4]); // "l" が表示される
    printf("%c", kw[0][5]); // "e" が表示される

    printf("%c", kw[0][0]); // "d" が表示される
    printf("%c", kw[1][0]); // "e" が表示される
    printf("%c", kw[2][0]); // "s" が表示される

1次元配列の時と同じように、ポインタでアクセスするにはどうしたらよいでしょうか。

char lib[6] = "scanf"は1次元の配列です。配列の名前libはこの文字列の先頭アドレスを保持しています。同様に、kw[0]は文字列の配列の最初の文字列の先頭アドレスを保持しています。kw[1]は文字列の配列の2番目の文字列の先頭アドレスを保持しています。kw[2]は文字列の配列の3番目の文字列の先頭アドレスを保持しています。

今回はこの方法で文字列を表示します。 */

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

#include <stdio.h>

void main(void);

void main(void)
{
    int i, j;
    char lib[6] = "scanf";                             /* 1次元配列 */
    char *p;                                           /* 1次元配列へのポインタ */
    char kw[3][7] = {"double", "extern", "switch"};    /* 2次元配列 */

    i = 0;
    while (lib[i] != '\0' ) {   /* 配列の添字を使って表示 */
        printf("%c", lib[i]);
        i++;                    /* 添字をインクリメント */
    }
    printf("\n");
                                    /* ポインタを使って表示 */
    p = lib;                        /* lib[ ]の先頭アドレスをpに代入 */
    while (*p != '\0')              /* pの指す値がヌルでない間 */
        printf("%c", *p++);         /* 1文字表示してポインタを進める */
    printf("\n\n");


    for (i = 0; i < 3; i++) {       /* 配列の添字を使って表示 */
        for (j = 0; j < 7; j++)
            printf("%c", kw[i][j]);
        printf("\n");
    }
    printf("\n");

    for (i = 0; i < 3; i++)           /* ポインタを使って表示 */
        printf("%s\n", kw[i]);        /* kw[i]はポインタ */
        printf("\n");
}

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

[部分文字列の検索]←このソース→[ポインタの配列(1)]

青い直線

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

青い直線

サイトマップ / C言語講座出入り口総目次目次:ポインタ>ポインタと配列