サイトマップ / C言語講座>出入り口>総目次>目次:ポインタ>ポインタの指す位置
[データの書き換え]←このソース→[ポインタの新しい宣言法]
/* 前回は、ポインタの指す変数の値を、
(*s)++;
とすることで増加させました。前々回に簡単に触れましたが、今回はポインタの指す位置を増加させます。
char str[ ] = "abcde";
str[ ]は要素数6の文字の配列(文字列)です。Cでは、文字列の末尾にはヌル文字('\0 ')が付加されます。[ ]の中で配列の要素数を指定するなら、ヌル文字も含め6としなければなりません。上記の[ ]の中が空白なのは指定しなくてもコンパイラが数えてくれるからです。
str[ ]を宣言し、下記のように初期化することもできます。
char str[6]; str[0] = 'a'; str[1] = 'b'; str[2] = 'c'; str[3] = 'd'; str[4] = 'e'; str[5] = '\0';
配列の名前'str'はこの文字列の最初の要素のアドレスを指しています。
重要:配列名は配列の最初の要素のアドレスを指す。
'str'はポインタではないのでインクリメントなどポインタに対する操作はできません。str[ ]の中身を見る(参照する)方法は2つあります。
最初の方法は配列の添字を使います。
putchar(str[0]);
もう一つは、
char型のポインタsにstrのアドレスを代入します。sにはstrの先頭のアドレスが入っています。
char *s; s = str;putchar(*s);
では次の文字を参照するにはどうしたら良いでしょうか。
s++;
sの指す位置をインクリメントします。このような操作をポインタの演算といいます。
ソースプログラムの中に次に示す記述があります。
while (str[i] != '\0') { // ヌル文字に達するまで putchar(str[i]); // 配列の要素を表示 i++; // 配列の添字をインクリメント }
配列の添字を使って、配列の要素を参照しています。
while (*s != '\0') { // ヌル文字に達するまで putchar(*s); // s の指す中身を表示 s++; // s の指す位置をインクリメント }
こちらはポインタによる参照です。こちらの方が実行速度が速くなります。 */
#include <stdio.h> void main(void); void main(void) { char str[ ] = "abcde"; int i = 0; /* 配列の添字として使う */ char *s; /* char 型ポインタ */ while (str[i] != '\0') { /* ヌル文字に達するまで */ putchar(str[i]); /* 配列の要素を表示 */ i++; /* 配列の添字をインクリメント */ } printf("\n"); /* 1行改行 */ s = str; /* str の最初の要素のアドレスを s に代入 */ while (*s != '\0') { /* ヌル文字に達するまで */ putchar(*s); /* s の指す中身を表示 */ s++; /* s の指す位置をインクリメント */ } printf("\n"); /* 1行改行 */ } |
[データの書き換え]←このソース→[ポインタの新しい宣言法]
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−