サイトマップ / C言語講座>出入り口>総目次>目次:ポインタ>ポインタと配列
[部分文字列の検索]←このソース→[ポインタの配列(1)]
今日は、ポインタと配列について学びます。文字列を下記のように宣言するとします。
char lib[6] = "scanf";
各要素に配列の添字でアクセスするには、このようにします。
配列の名前はその配列の先頭のアドレスを指します。しかし、ポインタと違って演算はできません。
下記では、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言語講座−それ自体コンパイルできる教材を使った講座です−